{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "100\n"
     ]
    }
   ],
   "source": [
    "nums = 100\n",
    "keys = hash(nums)\n",
    "print(keys)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1014570924054025219\n"
     ]
    }
   ],
   "source": [
    "nums = 3.44\n",
    "keys = hash(nums)\n",
    "print(keys)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "7009786208762907193\n",
      "7009786208762907193\n"
     ]
    }
   ],
   "source": [
    "data = str([10,20,30])\n",
    "keys = hash(data)\n",
    "print(keys)\n",
    "print(hash(data))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MD5 Hash of '我希望这本书可以帮到你！' is: 4dd02e16f16a8217876c35c9cfc1b080\n"
     ]
    }
   ],
   "source": [
    "# 导入 hashlib 模块\n",
    "import hashlib\n",
    "\n",
    "# 输入文本\n",
    "text = \"我希望这本书可以帮到你！\"\n",
    "\n",
    "# 选择 md5 函数并对文本进行哈希处理\n",
    "md5_hash = hashlib.md5()\n",
    "md5_hash.update(text.encode('utf-8'))\n",
    "\n",
    "# 获取哈希值的十六进制表示\n",
    "hashed_text = md5_hash.hexdigest()\n",
    "\n",
    "# 输出结果\n",
    "print(\"MD5 Hash of '{}' is: {}\".format(text, hashed_text))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABX4UlEQVR4nO3deZzN5f//8ceZ1YwGWWdkrBXfkiVbWqSylWwphCyFCJFPG8pSolUka4lKosVSlAyFhD6lVD5FyZbswmCYGTPv3x/X78yYDAYz5zrvc5732+3c5j1nzpx5zjXDec21ehzHcRARERFxoRDbAUREREQulAoZERERcS0VMiIiIuJaKmRERETEtVTIiIiIiGupkBERERHXUiEjIiIirqVCRkRERFxLhYyIiIi4lgoZkQCxbNkyPB4Py5Ytsx0li3fffZdKlSoRHh5OoUKFzvrYRYsWUa1aNfLly4fH4+HQoUMZH7vjjjvo3r37eX/9SZMmUbp0aZKTk8/7c0XE/6mQEfFz06dPx+PxZNzy5cvHlVdeSZ8+fdizZ0+ufI3PPvuMYcOG5cpznWrDhg106dKFChUq8MYbbzBlypQzPvbAgQO0adOGqKgoxo8fz7vvvkv+/PkB+Oabb1i8eDFPPPHEeWfo0qULKSkpTJ48+YK/D18bPHgwHo+HChUqsHfv3mwfk56ezvTp02nevDnx8fHkz5+fypUrM2LECE6cOOHjxCIWOSLi16ZNm+YAzjPPPOO8++67zhtvvOF07tzZCQkJccqVK+ccO3bMcRzH+eqrrxzA+eqrr877a/Tu3dvJi/8OJk6c6ADOH3/8cc7Hfv755w7gJCQknPaxFi1aOI0aNbrgHI8//rhTpkwZJz09/YKfw1cmT57sAE6DBg2cqKgop1atWs7Ro0dPe9yRI0ccwLnuuuucESNGOFOmTHG6du3qhISEOPXr13fF9yqSG9QjI+ISt99+Ox07dqRbt25Mnz6d/v37s2XLFubPn2872hl5exPONaR0tsfu3buXhQsX0qZNmwvO0aZNG7Zt28ZXX311wc/hCwsXLuShhx6iffv2LFq0iPnz57N+/XratWtHWlpalsdGRETwzTffsHr1agYPHkz37t156623GDp0KMuWLWPp0qWWvgsR31IhI+JSt956KwBbtmw56+M+/PBDatSoQVRUFEWLFqVjx478/fffGR/v0qUL48ePB8gyhHUuEyZM4OqrryYyMpKSJUvSu3fvLHNaypYty9ChQwEoVqwYHo/njMNX9evXp3PnzgDUqlULj8dDly5dAPPifvLkSRo0aJDxeMdxuOWWWyhWrFiWoZeUlBSuueYaKlSowLFjxzLur1GjBoULF/Zp0bd3716KFStG/fr1cRwn4/5NmzaRP39+2rZtm+Xx33//PW3btqVdu3a88847hIaG0rBhQz755BOWLl1K7969szw+IiKC66+//rSv26pVKwB+++23PPiuRPxPmO0AInJh/vzzTwCKFClyxsdMnz6drl27UqtWLUaNGsWePXsYO3Ys33zzDT/++COFChXiwQcfZOfOnSQkJPDuu+/m6GsPGzaM4cOH06BBA3r16sXGjRuZOHEi3333Hd988w3h4eGMGTOGd955h7lz5zJx4kQuueQSqlSpku3zDR48mIoVKzJlyhSeeeYZypUrR4UKFQBYtWoVRYoUoUyZMhmP93g8vPXWW1SpUoWePXsyZ84cAIYOHcr//vc/li1bljG/xuvaa6/lm2++Oef3lpSURFJS0jkfFxoayqWXXnrGjxcvXpyJEydyzz33MG7cOB5++GHS09Pp0qULMTExTJgwIeOxmzdvpmnTptx1111Mnz6dkJDMvzEbNGjAp59+SrNmzYiPj2fw4MFnzbV7924AihYtes7vQSQg2B7bEpGz886RWbJkibNv3z7nr7/+cmbNmuUUKVLEiYqKcnbs2OE4zulzZFJSUpzixYs7lStXdo4fP57xfAsWLHAAZ8iQIRn3nc8cmb179zoRERFOo0aNnLS0tIz7X3/9dQdw3nrrrYz7hg4d6gDOvn37cvx9fvfdd1nuv/HGG50aNWpk+zne+SQzZsxw1qxZ44SGhjr9+/fP9rE9evRwoqKizpnDm/lctzJlypzzuRzHce69914nOjra+f33352XXnrJAZx58+bl6HMvRIMGDZwCBQo4Bw8ezLOvIeJP1CMj4hKnDq0AlClThvfee4/LLrss28d///337N27l2HDhpEvX76M+5s2bUqlSpVYuHAhw4cPP+8cS5YsISUlhf79+2fpOejevTuDBg1i4cKFdO3a9byf90wOHDhwxu+xR48ezJkzh759+1K0aFEqVKjAyJEjs33spZdeyvHjx0lKSiI6OvqMX69Tp07ceOON58wVFRWVo/yvv/46y5Yt4+677+b333/nvvvuo0WLFjn63PM1cuRIlixZwoQJE3I0L0kkEKiQEXGJ8ePHc+WVVxIWFkaJEiWoWLFilkLi37Zt2wZAxYoVT/tYpUqVWLly5QXlONPzRkREUL58+YyP5ybnlDkm/zZ16lQqVKjAH3/8wapVq85YYHif41zzf8qXL0/58uUvPOy/FC5cmNdee4177rmHEiVK8Nprr+Xac59q9uzZPPXUUzzwwAP06tUrT76GiD9SISPiErVr16ZmzZq2Y/hckSJFOHjw4Bk/vmzZsozN7n755Rfq1q2b7eMOHjxIdHT0OXtSjh49ytGjR8+ZKzQ0lGLFip3zcQBffPFFRoYdO3bkem9JQkICnTp1omnTpkyaNClXn1vE32nVkkiA8k6O3bhx42kf27hx42mTZy/2eVNSUtiyZUuW580NlSpVOuPKrF27dtG3b18aNWrEnXfeyaOPPnrGHqEtW7bwf//3f+f8ei+//DJxcXHnvNWqVStH+RctWsSbb77J448/TrFixejcuTMnT57M0efmxLfffkurVq2oWbMmH3zwAWFh+vtUgot+40UCVM2aNSlevDiTJk3i/vvvJzIyEoDPP/+c3377jSFDhmQ81rvC59ChQ+fsLWjQoAERERG89tprNGnSJKMImjp1KocPH6Zp06a5+n3UrVuXN998k82bN5825NO9e3fS09OZOnUqoaGhXH311TzwwAMkJCScVpz98MMPdOjQ4ZxfLzfnyBw6dIhu3bpRu3ZtRo4cyS233MLtt9/OyJEjs7T/hfrtt99o2rQpZcuWZcGCBTmetyMSSFTIiASo8PBwXnjhBbp27crNN9/Mvffem7H8umzZsjzyyCMZj61RowYADz/8MI0bNyY0NJR27dpl+7zFihVj4MCBDB8+nCZNmtC8eXM2btzIhAkTqFWrFh07dszV76Np06aEhYWxZMkSevTokXH/tGnTWLhwIdOnT6dUqVIAjBs3jo4dOzJx4kQeeuihjMeuXbuWf/75J0eTbHNzjky/fv04cOAAS5YsITQ0lCZNmtCtWzdGjBhBixYtqFq16gU/95EjR2jcuDEHDx7kscceY+HChVk+XqFChTMOs4kEFNvLpkTk7M60LPnfznREwezZs53q1as7kZGRTuHChZ0OHTpkLNn2OnnypNO3b1+nWLFijsfjydFS7Ndff92pVKmSEx4e7pQoUcLp1avXaUt+c2P5teM4TvPmzZ3bbrst4/2//vrLKViwoNOsWbPTHtuqVSsnf/78zubNmzPue+KJJ5zSpUv7dNv++fPnO4DzyiuvZLk/MTHRKVOmjFO1alUnJSXlgp9/y5YtZ10e3rlz54v8DkTcweM4Z1kOICLiB77++mvq16/Phg0buOKKK87rc5OTkylbtixPPvkk/fr1y6OEImKLJvuKiN+76aabaNSoES+++OJ5f+60adMIDw+nZ8+eeZBMRGxTj4yIiIi4lnpkRERExLVUyIiIiIhrqZARERER11IhIyIiIq4V8Bvipaens3PnTmJiYs5rG3YRERGxx3Ecjhw5QsmSJc96QG7AFzI7d+4kPj7edgwRERG5AH/99VfG7t3ZCfhCJiYmBjANUaBAActp7EtNTWXx4sU0atSI8PBw23ECltrZN9TOvqF29g21c1aJiYnEx8dnvI6fScAXMt7hpAIFCqiQwfxDiY6OpkCBAvqHkofUzr6hdvYNtbNvqJ2zd65pIZrsKyIiIq6lQkZERERcS4WMiIiIuJYKGREREXEtFTIiIiLiWipkRERExLVUyIiIiIhrqZARERER11IhIyIiIq6lQkZERERcy2ohM2rUKGrVqkVMTAzFixenZcuWbNy4Mctj6tevj8fjyXLr2bOnpcQiIiLiT6wWMsuXL6d3796sWbOGhIQEUlNTadSoEceOHcvyuO7du7Nr166M24svvmgpsYiIiPgTq4dGLlq0KMv706dPp3jx4qxdu5Z69epl3B8dHU1sbKyv452V48APP0D58nDppbbTiIiI+N7mzeZt+fL2MvjV6deHDx8GoHDhwlnuf++995gxYwaxsbE0a9aMp59+mujo6GyfIzk5meTk5Iz3ExMTAXOqaGpqaq5lbdMmlHnzQnj99TR69EjPtefNa942yM22kNOpnX1D7ewbamffcGM7jxwZytSpIQwblsagQbn7WpjTdvA4juPk6le+QOnp6TRv3pxDhw6xcuXKjPunTJlCmTJlKFmyJD///DNPPPEEtWvXZs6cOdk+z7Bhwxg+fPhp98+cOfOMxc+FmDv3ct5++2oqV97HiBGrcu15RURE3ODkSQ9duzbhyJEIhg//hqpV9+fq8yclJdG+fXsOHz5MgQIFzvg4vylkevXqxeeff87KlSspVarUGR/35Zdfctttt7Fp0yYqVKhw2sez65GJj49n//79Z22I87VtG1xxRTgej8O2bSfxs5GvM0pNTSUhIYGGDRsSHh5uO07AUjv7htrZN9TOvuG2dv7iCw/NmoVRvLjD1q0nCcvlMZ7ExESKFi16zkLGL4aW+vTpw4IFC1ixYsVZixiAOnXqAJyxkImMjCQyMvK0+8PDw3P1F+Pyy6FOHfj2Ww/z54fTp0+uPbVP5HZ7SPbUzr6hdvYNtbNvuKWdvQMjrVt7iIrK/bw5bQOrq5Ycx6FPnz7MnTuXL7/8knLlyp3zc9atWwdAXFxcHqc7t7ZtzdvZs+3mEBER8aWUFJg711x7XwttsVrI9O7dmxkzZjBz5kxiYmLYvXs3u3fv5vjx4wD8+eefPPvss6xdu5atW7fyySef0KlTJ+rVq0eVKlVsRgfgnnvM25UrYccOu1lERER8ZfFiOHQI4uLgxhvtZrFayEycOJHDhw9Tv3594uLiMm6z/38XR0REBEuWLKFRo0ZUqlSJ//znP7Ru3ZpPP/3UZuwMpUrBDTeY648+sptFRETEV7wjEffcA6GhdrNYnSNzrnnG8fHxLF++3EdpLkzbtvDNN+aH2r+/7TQiIiJ568QJmD/fXLdpYzcL6Kyli3b33eDxwJo1ZiWTiIhIIFu0CI4cMaMSdevaTqNC5qLFxYF3E+IPP7SbRUREJK95h5XatIEQP6gi/CCC+2n1koiIBIOkJPBOU7W9WslLhUwuaN3aVKXffw9//mk7jYiISN5YuBCOHYOyZaFWLdtpDBUyuaB4cbjlFnP9wQd2s4iIiOSVU4eVPB67WbxUyOQSbxebChkREQlER4+aHhnwn2ElUCGTa+66C8LCYN062LDBdhoREZHc9cknZun15ZdD9eq202RSIZNLihSBhg3NtSb9iohIoJk1y7xt185/hpVAhUyuuvde8/b998E/zhQXERG5eP/8Y/aPgczXOn+hQiYXtWgB+fLBxo1miElERCQQzJkDqalwzTVw1VW202SlQiYXFSgATZuaa28XnIiIiNt5X9P8rTcGVMjkOu8PedYsSE+3m0VERORi7d4NX31lrtu1s5slOypkctkdd0BMDGzfbs5fEhERcbMPPzR/mNepA+XK2U5zOhUyuSwqClq2NNfvv281ioiIyEXzvpb547ASqJDJE96utw8+gJMn7WYRERG5UFu3wurVZrn1PffYTpM9FTJ5oGFDs6/M3r2wbJntNCIiIhfGuy9a/fpQsqTVKGekQiYPhIfD3Xeba61eEhERt/Ln1UpeKmTyiHd46eOPITnZbhYREZHztWGD2RMtLMwcw+OvVMjkkZtuMt1whw7B4sW204iIiJwfb29M48ZmuoS/UiGTR0JDzTHnADNn2s0iIiJyPhwnc7WSP+4dcyoVMnmofXvz9pNPzPHnIiIibrB2Lfz+u9lSpEUL22nOToVMHqpZE664ApKSYP5822lERERyxjuS0KKF2eTVn6mQyUMeT2avzHvv2c0iIiKSE2lpmfNjvK9h/kyFTB7z/hIsXgz79tnNIiIici7LlsGuXVC4sJno6+9UyOSxK680Q0xpaWanXxEREX/mHUG45x6IiLCbJSdUyPhAhw7mrVYviYiIPztxwux/Bu4YVgIVMj7Rtq2ZL7NqFWzZYjuNiIhI9hYuhMREiI+HG2+0nSZnVMj4QFwc3HqrudaJ2CIi4q+8Iwf33gshLqkQXBLT/bzDS++9ZzYaEhER8SeHDsGCBebaLcNKoELGZ+66CyIj4ddf4eefbacRERHJas4cSEmBq6+GKlVsp8k5FTI+UrAg3HmnudaeMiIi4m+8r03t25t5nW6hQsaHvF11778P6el2s4iIiHjt3AlffWWu773XbpbzpULGh+64w/TM7NgBK1bYTiMiImLMmmXmb9atC+XK2U5zflTI+FC+fGaDIYAZM+xmERER8Xr3XfP2vvvs5rgQKmR8rGNH8/bDD83GQyIiIjatXw/r1kF4OLRpYzvN+VMh42M33QSlS5sNhz791HYaEREJdt4RgjvugCJF7Ga5ECpkfCwkJHNPGQ0viYiITenpmauVvCMGbqNCxgLvL8tnn8H+/XaziIhI8FqxwixAOXWLELdRIWPBVVfBtdfCyZM6EVtEROzxTvK95x6zIMWNVMhY4u2V0fCSiIjYcPw4fPSRuXbrsBKokLGmXTszX2b1ati0yXYaEREJNp9+ahaelC5tFqK4lQoZS+LioGFDc60jC0RExNe8IwIdOrjnpOvsuDi6+506vKQTsUVExFf274fPPzfXbh5WAhUyVrVsCdHRZmjp229tpxERkWAxe7ZZcHLttWYBipupkLHokkvgrrvMtXfmuIiISF7zDiu58UiCf1MhY5m3S2/WLEhJsZtFREQC3++/w5o1EBpqFp64nQoZyxo0MBN///kHFi60nUZERALdO++Yt40bQ2ys3Sy5QYWMZaGhmb0y3l8uERGRvJCenjmVoVMnu1lyiwoZP+D9ZVq4UEcWiIhI3lm+HLZvN0cSNG9uO03uUCHjBypXNjPHU1PNXBkREZG84O35b9MGoqLsZsktKmT8ROfO5u3bb9vNISIigenYscwjCbyvOYFAhYyfuPdeCAuD77+HX3+1nUZERALN3Llw9ChUqADXX287Te5RIeMnihWDO+4w15r0KyIiuc372tKpE3g8drPkJhUyfsQ76XfGDEhLs5tFREQCx44dsGSJuQ6ETfBOpULGj9x5J1x6Kfz9N3z5pe00IiISKN57z5zpV68elCtnO03uUiHjRyIjM3dZ1KRfERHJDY6T+ZoSKHvHnMpqITNq1Chq1apFTEwMxYsXp2XLlmzcuDHLY06cOEHv3r0pUqQIl1xyCa1bt2bPnj2WEuc970zyOXPgyBG7WURExP3WroXffoN8+eCee2ynyX1WC5nly5fTu3dv1qxZQ0JCAqmpqTRq1Ihjx45lPOaRRx7h008/5cMPP2T58uXs3LmTu7wnLQag2rWhYkU4fhw+/NB2GhERcbvp083bVq2gQAGrUfJEmM0vvmjRoizvT58+neLFi7N27Vrq1avH4cOHmTp1KjNnzuTWW28FYNq0afzf//0fa9as4brrrrMRO095PKZXZtAg88t3//22E4mIiFslJ8PMmea6SxerUfKM1ULm3w4fPgxA4cKFAVi7di2pqak0aNAg4zGVKlWidOnSrF69OttCJjk5meTk5Iz3ExMTAUhNTSU1NTUv4+eae++Fp54K4+uvPfz2WyqXX557z+1tA7e0hVupnX1D7ewbamffyIt2njPHw8GDYZQq5VCv3knc9CPMaTv4TSGTnp5O//79ueGGG6hcuTIAu3fvJiIigkKFCmV5bIkSJdi9e3e2zzNq1CiGDx9+2v2LFy8mOjo613PnlWrVruOHH0owdOhmOnTYkOvPn5CQkOvPKadTO/uG2tk31M6+kZvt/PLL1wEluO66P/jii99y7Xl9ISkpKUeP85tCpnfv3qxfv56VK1de1PMMHDiQAQMGZLyfmJhIfHw8jRo1ooCLBgePHvXQsSOsWXMl77xTntDQ3Hne1NRUEhISaNiwIeHh4bnzpHIatbNvqJ19Q+3sG7ndzjt3wrp15mV++PByXHGFu9Zde0dUzsUvCpk+ffqwYMECVqxYQalSpTLuj42NJSUlhUOHDmXpldmzZw+xsbHZPldkZCSRkZGn3R8eHu6qf4CtW0OfPvDXXx5WrgznlNG1XOG29nArtbNvqJ19Q+3sG7nVzrNmQXo63HgjXHWV+35uOW0Dq6uWHMehT58+zJ07ly+//JJy/9qlp0aNGoSHh7N06dKM+zZu3Mj27dupW7eur+P6VL580L69uZ42zW4WERFxF8fJfO0I1Em+XlZ7ZHr37s3MmTOZP38+MTExGfNeChYsSFRUFAULFuSBBx5gwIABFC5cmAIFCtC3b1/q1q0bkCuW/q1LF5gwwewpc+gQ/GuqkIiISLa+/RY2boToaGjTxnaavGW1R2bixIkcPnyY+vXrExcXl3GbPXt2xmNeffVV7rzzTlq3bk29evWIjY1lzpw5FlP7Ts2acPXVcOIEfPCB7TQiIuIW3t6Y1q0hJsZulrxmfWgpu1uXU/rB8uXLx/jx4/nnn384duwYc+bMOeP8mEDj8WR2CWp4SUREciIpycyPAeja1W4WX9BZS36uY0cIDYU1a2BD7q/CFhGRADNvHiQmQtmycPPNttPkPRUyfi42Fu64w1x7t5kWERE5E28PfufOEBIEr/JB8C26n3d46e234eRJq1FERMSPbdsG3oW+gXjSdXZUyLjAnXdCsWKwezf863gqERGRDNOnm6XXt9wC5cvbTuMbKmRcICIC7rvPXE+dajeLiIj4p/T0zGGlBx6wm8WXVMi4hPeXcsEC2LPHbhYREfE/S5eaoaWCBeGuu2yn8R0VMi5x1VVw3XVmjsw779hOIyIi/sbbY9+hA0RF2c3iSypkXOT++83bqVPNGKiIiAjAgQMwd665DqZhJVAh4ypt25rtpjduhFWrbKcRERF/8d57kJIC1arBtdfaTuNbKmRcpECBzDMzNOlXRETA9NB7XxOCrTcGVMi4jveX9IMP4MgRu1lERMS+H36An3+GyEho3952Gt9TIeMyN9wAFSvCsWM6SFJERDJ7Y1q1gsKF7WaxQYWMy3g8WSf9iohI8Dp+HGbONNfBOKwEKmRcqVMnc5Dk6tXw66+204iIiC0ffwyHD5sDIm+91XYaO1TIuFBsLDRtaq7VKyMiErzefNO87do1OA6IzE6Qftvu1727efv225CcbDeLiIj43saNsHy5KWC8Uw6CkQoZl2rSBC67LOsmSCIiEjy8vTG33w6lStnNYpMKGZcKC8uc2PXGG3aziIiIb6WkmB55gB497GaxTYWMi91/v1nF9OWX8OefttOIiIivzJ8P+/ZByZJwxx2209ilQsbFypSBxo3NtbeLUUREAp+3J75rV9NDH8xUyLicd9LvtGmQmmo3i4iI5L3NmyEhwVwH694xp1Ih43LNmkGJErBnD3z6qe00IiKS17zbbjRqBOXK2c3iD1TIuFx4uOlaBE36FREJdCdPmh54yOyRD3YqZAJAt27m7RdfwLZtdrOIiEjeWbgQdu2CYsWgeXPbafyDCpkAUKGC2ZraceCtt2ynERGRvOLtee/SBSIirEbxGypkAoS3i3HqVNP1KCIigeWvv+Dzz821tydeVMgEjFatoGhR+Ptv+Owz22lERCS3vfkmpKdD/fpw5ZW20/gPFTIBIjIy86yNSZPsZhERkdyVmpo5rNSrl90s/kaFTADxDi8tWgRbt1qNIiIiuWjBAjPJt3hxaNnSdhr/okImgFx+OTRsaCb9aim2iEjgmDzZvL3/fk3y/TcVMgGmZ0/zdupUc6iYiIi42+bNZnsNj0d7x2RHhUyAadYMYmPNTr/z59tOIyIiF2vKFPO2USMoX95uFn+kQibAhIdnLsvzdkWKiIg7paRk7g/m7XGXrFTIBKDu3SEkBJYuhd9/t51GREQu1Ny5sG8flCwJd95pO41/UiETgEqXhttvN9feLkkREXEf73Ya3bpBWJjdLP5KhUyA8nZBTp8OJ05YjSIiIhdgwwZYtsz0sGsn3zNTIROgbr8d4uPhwAH46CPbaURE5Hx5e9TvvNP8fy7ZUyEToEJDoUcPcz1xot0sIiJyfpKSYNo0c/3gg3az+DsVMgHMO6a6ahWsW2c7jYiI5NSsWXDoEJQrB02a2E7j31TIBLDYWGjd2lyrV0ZExB0cB8aPN9e9epk5MnJmap4A17u3eTtjhqnuRUTEv333nYcffsh6GLCcmQqZAHfjjVC5shlvfecd22lERORcJk0yL83t2kGRIpbDuIAKmQDn8cBDD5nrCRNMl6WIiPinxMQIPvzQA2T+3y1np0ImCHTsCDExsHEjfPWVx3YcERE5gyVLSpOc7KFGDahVy3Yad1AhEwRiYqBTJ3Pt7bIUERH/kpYGX3xRFjDzGz36uzNH9KoWJHr1Mm8//dTD/v357IYREZHTLF7sYc+e/Fx6qUPbtrbTuIcKmSBx9dVw882QluYhIaGM7TgiIvIvkyebl+TOndOJjrYcxkVUyAQR71LsxYvLkpJiN4uIiGTavBk+/9yMJfXokW45jbuokAkiLVtCXJzDwYP5mDNHg68iIv7CrCr1UL36Hi6/3HYad1EhE0TCw6F7d1PpT5igH72IiD84dgymTjXXTZtusRvGhfRqFmS6dUsnLCydNWtCWLvWdhoREXnvPbPzeoUKDtdeu8d2HNdRIRNkYmPhhhv+BmDcOMthRESCnONk/l/cs2e6zlW6AGqyIOTtupw1C/btsxxGRCSILV8O69dDdLRZrSTnT4VMELryyoPUrJlOcjK88YbtNCIiwcvbG9OpExQqZDWKa6mQCVIPPWQq/4kT4eRJy2FERILQ9u0wb5657tPHahRXUyETpO65x6F4cdixI/MfkoiI+M7EiZCeDrfeajYtlQtjtZBZsWIFzZo1o2TJkng8Hub96xW1S5cueDyeLLcmTZrYCRtgIiOhRw9zrUm/IiK+dfx45tB+3752s7id1ULm2LFjVK1alfHjx5/xMU2aNGHXrl0Zt/fff9+HCQNbz54QFgYrVsDPP9tOIyISPGbNggMHoEwZaNbMdhp3C7P5xW+//XZuv/32sz4mMjKS2NhYHyUKLpddBnfdBR98AK+9Bm++aTuRiEjgO3XJ9UMPQWio3TxuZ7WQyYlly5ZRvHhxLr30Um699VZGjBhBkSJFzvj45ORkkpOTM95PTEwEIDU1ldTU1DzP6++8beB9+9BDHj74IIwZMxyeeeYkxYrZTBc4/t3OkjfUzr6hds5dX3/t4ccfw4iKcujU6STeZlU7Z5XTdvA4juPkcZYc8Xg8zJ07l5YtW2bcN2vWLKKjoylXrhx//vkngwYN4pJLLmH16tWEnqGEHTZsGMOHDz/t/pkzZxKt40RP4zjw2GP12LTpUjp0+I177vnddiQRkYD2/PO1WLOmJI0bb6FXL43rn0lSUhLt27fn8OHDFChQ4IyP8+tC5t82b95MhQoVWLJkCbfddlu2j8muRyY+Pp79+/eftSGCRWpqKgkJCTRs2JDw8HAAZs700KVLGHFxDn/8cZKICMshA0B27Sy5T+3sG2rn3LNlC1SqFIbjeFi3LpWrrsr8mNo5q8TERIoWLXrOQsbvh5ZOVb58eYoWLcqmTZvOWMhERkYSGRl52v3h4eH6xTjFqe1x770wcCDs2uVh/vxw2re3HC6A6PfON9TOvqF2vniTJ5ue8MaNoWrV7NtS7WzktA1ctY/Mjh07OHDgAHFxcbajBJSICOjd21y/+qr5RyYiIrnryJHMRRX9+1uNElCsFjJHjx5l3bp1rFu3DoAtW7awbt06tm/fztGjR3nsscdYs2YNW7duZenSpbRo0YLLL7+cxo0b24wdkHr0gHz54PvvYfVq22lERALP9OmQmAiVKkGjRrbTBA6rhcz3339P9erVqV69OgADBgygevXqDBkyhNDQUH7++WeaN2/OlVdeyQMPPECNGjX4+uuvsx06kotTrBh07Giux4yxGkVEJOCkp8PYsea6Xz90ynUusjpHpn79+pxtrvEXX3zhwzTSr5/p9vz4Y9i2zWzUJCIiF2/hQvjzT7j0UrjvPttpAotqQslQuTLcdpv5y+Esmy2LiMh58vZ0d+8O+fNbjRJwVMhIFt4JaG+8AUePWo0iIhIQfv4ZvvzS7ODrXVghuUeFjGRxxx1wxRVw6BBMm2Y7jYiI+40ebd62bg2lS9vNEohUyEgWISHwyCPmeswYSEuzGkdExNV27oSZM831f/5jN0ugUiEjp+ncGQoXhs2bYf5822lERNxr/HhITYUbb4TatW2nCUwqZOQ00dHQq5e5fuUVu1lERNzq2DGYONFcDxhgN0sgUyEj2erTx+z4u2oVrFljO42IiPtMnw4HD0KFCtC8ue00gUuFjGQrNhY6dDDX6pURETk/aWnmyBcw8w5DQ+3mCWQqZOSMvF2hc+aYE1tFRCRnPvkkcwO8Ll1spwlsKmTkjCpXNie0pqfr2AIRkfPh7cnu1Usb4OU1FTJyVt7lglOnmrFeERE5u2+/hW++MfMM+/SxnSbwqZCRs2rQAK65xsy+nzLFdhoREf/n7Y1p3x7i4uxmCQYqZOSsPJ7MXpnXXoPkZLt5RET82ebN5uBdyNxcVPKWChk5p3vvhZIls+5QKSIipxs92swrbNIEqlSxnSY4qJCRc4qIyPzL4sUXzT9SERHJat8+eOstc/3443azBBMVMpIjPXpAwYKwYQMsWGA7jYiI/3n9dTh+HGrWhPr1bacJHipkJEcKFMg8tuDFF+1mERHxN8eOmUIG4IknzPxC8Q0VMpJjDz9shpm++cbcRETEeOst+OcfcxxBq1a20wSX8y5kfvvtN4YOHcqtt95KhQoViIuLo0qVKnTu3JmZM2eSrGUtASsuDjp1MtcvvWQ3i4iIvzh5MnPJ9aOP6jgCX8txIfPDDz/QoEEDqlevzsqVK6lTpw79+/fn2WefpWPHjjiOw+DBgylZsiQvvPCCCpoA9eijpst0/nwzX0ZEJNh9+CFs2wbFikHnzrbTBJ+wnD6wdevWPPbYY3z00UcUKlTojI9bvXo1Y8eO5ZVXXmHQoEG5kVH8SMWK0KIFzJsHL78Mb75pO5GIiD2Okzlv8OGHISrKbp5glONC5vfffyc8PPycj6tbty5169YlNTX1ooKJ/3r8cVPIvPsuPPOM2WNGRCQYJSTAunUQHQ0PPWQ7TXDK8dBSTooYgKSkpPN6vLhP3bpw442QkpJ5TL2ISDB6/nnztnt3KFzYbpZgdUGrlm677Tb+/vvv0+7/73//S7Vq1S42k7jAwIHm7cSJZqa+iEiwWbMGvvoKwsMzj3IR37ugQiZfvnxUqVKF2bNnA5Cens6wYcO48cYbueOOO3I1oPin22+HqlWz7p0gIhJMRo0ybzt2hPh4u1mCWY7nyJxq4cKFjB8/nvvvv5/58+ezdetWtm3bxoIFC2jUqFFuZxQ/5PGYXpl27WDsWBgwAC65xHYqERHfWL8ePvnE/F/4xBO20wS3CypkAHr37s2OHTt44YUXCAsLY9myZVx//fW5mU383N13w+WXw6ZN8MYbOulVRIKHd25M69ZmNafYc0FDSwcPHqR169ZMnDiRyZMn06ZNGxo1asSECRNyO5/4sdDQzL9EXn4ZtHWQiASDzZvh/ffNtXe+oNhzQYVM5cqV2bNnDz/++CPdu3dnxowZTJ06laeffpqmTZvmdkbxY/fdZ5Zf79xplmOLiAS6l16C9HRo3BiuvdZ2GrmgQqZnz56sWLGCcuXKZdzXtm1bfvrpJ1JSUnItnPi/yMjM2fovvABpaXbziIjkpV27zLlKoN4Yf3FBhczTTz9NSMjpn1qqVCkSEhIuOpS4S48eZv+ETZvgo49spxERyTuvvmr20Lr+eqhXz3YagfMoZLZv335eT5zdPjMSmC65xGzNDTBypOlyFREJNP/8Y/bOAtMb4/HYzSNGjguZWrVq8eCDD/Ldd9+d8TGHDx/mjTfeoHLlynz88ce5ElDcoW9fU9D8/DN8+qntNCIiuW/MGDh6FKpUAU0H9R85Xn7922+/MWLECBo2bEi+fPmoUaMGJUuWJF++fBw8eJBff/2V//3vf1x77bW8+OKL2hgvyBQuDH36mCWJzz4LzZvrrxURCRyHD8Nrr5nrp5/W/2/+JMc9Mjt27OCll15i165djB8/niuuuIL9+/fzxx9/ANChQwfWrl3L6tWrVcQEqQEDzMFpa9fCokW204iI5J5x40wxc9VVcNddttPIqXLcI1O9enV2795NsWLFeOyxx/juu+8oUqRIXmYTlylWDHr2hNGjTa9Mkyb6q0VE3O/IkcwDcgcPhmzWuohFOf5xFCpUiM2bNwOwdetW0jWjU7Lx6KNmSfbq1eYwNRERt5s0yUz0veIKaNvWdhr5txz3yLRu3Zqbb76ZuLg4PB4PNWvWJDQ0NNvHegseCT5xceY4+9dfN70yt95qO5GIyIVLSjI7lwMMGmR2NBf/kuNCZsqUKdx1111s2rSJhx9+mO7duxMTE5OX2cSlHn8cJk+GZctg5Uq48UbbiURELswbb8DevVC2LHToYDuNZOe8Do1s0qQJAGvXrqVfv34qZCRb8fHQtStMmWJ6Zb74wnYiEZHzd+IEvPiiuR44EMLD7eaR7F3QlKVp06apiJGzevJJ0wW7eDF8+63tNCIi52/aNHOOXKlS0Lmz7TRyJpp7LXmiXDno1MlcDxtmNYqIyHlLTjY7lQM88YRZxCD+SYWM5JnBg02vzKJFZhWTiIhbvPkm7NgBl10G3brZTiNno0JG8kyFCpndseqVERG3OHEiszdm4EDIl89uHjk7FTKSp556CsLCzFyZVatspxERObc338ycG6PeGP+nQkbyVLly0KWLuVavjIj4uxMnYNQocz1okObGuIEKGclzgwebXpmEBPjmG9tpRETObMoU0xsTHw/33287jeSEChnJc2XLmn1lAIYOtRpFROSMjh/P7I0ZPFi9MW6hQkZ8YvBgs5nU0qXw9de204iInG7yZNi9G8qUyfzjS/yfChnxiTJlMrtp1SsjIv4mKQleeMFcDx4MERF280jOqZARnxk0yPzn8NVX8OWXttOIiGQaP970xpQtq1183UaFjPhM6dLQo4e5HjwYHMduHhERgMREeP55cz10qHpj3EaFjPjU4MEQFQVr1sDChbbTiIjAq6/CP/9AxYrQsaPtNHK+VMiIT8XGQt++5vrppyE93W4eEQluBw7A6NHm+plnzFYR4i4qZMTnHn8cChSAdevg449tpxGRYPbSS2ZoqWpVuPtu22nkQqiQEZ8rUgQGDDDXQ4ZAWprdPCISnHbvhtdeM9fPPgshekV0Jas/thUrVtCsWTNKliyJx+Nh3rx5WT7uOA5DhgwhLi6OqKgoGjRowB9//GEnrOSqRx6BwoVhwwaYMcN2GhEJRiNHmk3w6tSBO++0nUYulNVC5tixY1StWpXx48dn+/EXX3yR1157jUmTJvHtt9+SP39+GjduzIkTJ3ycVHJbgQLwxBPmetgwSEmxGkdEgsz27WYDPIDnngOPx24euXBWC5nbb7+dESNG0KpVq9M+5jgOY8aM4amnnqJFixZUqVKFd955h507d57WcyPu1KePmfy7das5bVZExFeeecb8AVW/Ptx6q+00cjH8dkRwy5Yt7N69mwYNGmTcV7BgQerUqcPq1astJpPcEh0NTz1lrp99Fo4ds5tHRILDb7/BtGnmWr0x7ue3C812794NQIkSJbLcX6JEiYyPZSc5OZnk5OSM9xMTEwFITU0lNTU1D5K6i7cN/KUtunSB0aPD2LzZwyuvpDFwYGCsx/a3dg5UamffCLR2HjgwlPT0EJo1S6dWrTT85dsKtHa+WDltB78tZC7UqFGjGD58+Gn3L168mOjoaAuJ/FNCQoLtCBlatryM0aNr8sIL6ZQrt4QCBQJnwow/tXMgUzv7RiC088aNlzJ/fj1CQhwaNVrGZ58dsR3pNIHQzrkhKSkpR4/z20ImNjYWgD179hAXF5dx/549e6hWrdoZP2/gwIEM8K7txfTIxMfH06hRIwoUKJBned0iNTWVhIQEGjZsSHh4uO04ADRpAl9+6bBuXThr1zbipZfc3yvjj+0ciNTOvhEo7ew4MHp0KAD33efw4IM3WU6UVaC0c27xjqici98WMuXKlSM2NpalS5dmFC6JiYl8++239OrV64yfFxkZSWRk5Gn3h4eH6xfjFP7WHs8/bwqaiRNDeeSRUMqUsZ0od/hbOwcqtbNvuL2dP/8cVqyAyEh49tkQwsP9c5qo29s5t+S0Daz+FI8ePcq6detYt24dYCb4rlu3ju3bt+PxeOjfvz8jRozgk08+4ZdffqFTp06ULFmSli1b2owteaBRI7jlFrOKYOhQ22lEJNCkp8PAgea6b1+Ij7ebR3KP1ULm+++/p3r16lSvXh2AAQMGUL16dYYMGQLA448/Tt++fenRowe1atXi6NGjLFq0iHz58tmMLXnA48k8ffadd2D9ert5RCSwvP8+/PQTFCyYWdBIYLA6tFS/fn0cxznjxz0eD8888wzPPPOMD1OJLbVrQ+vW5vylgQPh009tJxKRQJCSYg6pBbMRZ+HCdvNI7vLPAUIJWs89B6GhsGABLF9uO42IBIIJE2DLFoiLg379bKeR3KZCRvxKxYrQvbu5fvRRM64tInKhDh40u/iCeatdOAKPChnxO8OGwSWXwPffw+zZttOIiJs995wpZipXhq5dbaeRvKBCRvxOiRLw5JPmeuBA0BmhInIhtmyBcePM9UsvmWFrCTwqZMQvPfIIXHYZbNuW+R+RiMj5GDTITPRt2BAaN7adRvKKChnxS9HRpksYzNsDB+zmERF3+fZbmDXLbO3w0ks6GDKQqZARv9WxI1StCocPm9OxRURywnHMYgGAzp3N/yMSuFTIiN8KDYWXXzbX48fDH3/YzSMi7jBvHqxcCVFR+iMoGKiQEb/WoAHcfjucPGk2shIROZuUFHj8cXP9n/9AqVJ280jeUyEjfs+72mDuXPjqK9tpRMSfjRsHmzZBbGxmQSOBTYWM+L2rr4aePc31I49AWprdPCLin/buzdz8buRIiImxm0d8Q4WMuMKwYVCokDn07a23bKcREX80ZAgkJsK115pJvhIcVMiIKxQtaooZgMGDzUomERGvn3+GN94w12PGQIhe3YKGftTiGg89ZM5i2rcPRoywnUZE/IXjQP/+5my2Nm3gpptsJxJfUiEjrhEeDqNHm+uxY82EPhGR+fPNQoDISHjhBdtpxNdUyIir3HEHNGkCqamZG16JSPBKTs78v+DRR6FsWatxxAIVMuI6r7xilmPPnw8JCbbTiIhNr74Kf/4JcXGZh81KcFEhI65z1VXQp4+5fvhhswGWiASfHTsy58u98AJccondPGKHChlxpWHDoHhx2LABXnvNdhoRseGxx+DYMbjhBnM2mwQnFTLiSoUKZU7qGz4cdu60GkdEfGzZMnO6dUgIvP66TrcOZipkxLU6dYLrroOjR7UVuUgwSU2Fvn3Ndc+eUK2a1ThimQoZca1T/xJ77z1YscJ2IhHxhQkTYP16KFJEp1uLChlxuRo1oHt3c923rzklW0QC15495igCMOcpFS5sN4/Yp0JGXO+55+DSS80W5RMn2k4jInnpySfNeUo1asADD9hOI/5AhYy4XtGippgBeOop2L3bbh4RyRtffw3Tp5vr1183+0mJqJCRgNCjB9Ssaf5SGzDAdhoRyW2pqdCrl7nu1s1M9BcBFTISIEJDYdIkMwH4/fdhyRLbiUQkN736Kvzvf6YH9vnnbacRf6JCRgJGjRrmhGwwb0+csJtHRHLHtm1mvyiAl14yq5VEvFTISEAZMQJiY+GPP+DFF22nEZHc8PDDkJQE9epB586204i/USEjAaVgQdMFDWZp5qZNdvOIyMX55BNzCwsz+8doB1/5NxUyEnDatoWGDSE5GXr3BsexnUhELsSxY5k7+D76KFx9td084p9UyEjA8Xhg/HiIjITFi815LCLiPsOGwfbtUKYMPP207TTir1TISEC64goYNMhc9+sHBw7YzSMi52ftWhg92lyPHw/R0XbziP9SISMB68knTVf0vn2mW1pE3CE11ewVk54O7dpB06a2E4k/UyEjASsiAt54www1TZ+uvWVE3OLVV2HdOnOO0tixttOIv1MhIwGtbl0z4RfgwQfNEk4R8V+bNsHQoeb6lVegeHG7ecT/qZCRgDdyJJQqBZs3m8mDIuKfHAd69jSbWd52m/aMkZxRISMBLyYm81Ts0aPhhx/s5hGR7L39NixdClFRMHmy9oyRnFEhI0HhzjvN/jJpafDAA2YyoYj4j127Mg98HT4cKlSwm0fcQ4WMBI2xY83kwXXrdOiciD/xDikdPAjXXguPPGI7kbiJChkJGiVKwLhx5vrZZ+Hnn+3mERHj/ffNMQTh4TBtmjmOQCSnVMhIULn3XmjRwgwtde2qISYR23bvzjyG4OmnoUoVu3nEfVTISFDxeMzE30svNZN+dUK2iD2OA716wT//QLVqZhNLkfOlQkaCTlxc5hDT8OGwfr3dPCLBavZsmDfPDCVNn26GlkTOlwoZCUrt20Pz5mZoqUsXOHnSdiKR4LJnD/TpY66fegqqVrWbR9xLhYwEJY8HJk2CQoXM4XSjRtlOJBI8vKuUDhwwBczAgbYTiZupkJGgFRcHr79urp95xhQ0IpL3pk83Q0rh4eY6IsJyIHE1FTIS1Nq3h7vvNkNLHTvC8eO2E4kEtq1boV8/cz18uJnkK3IxVMhIUPMOMcXFwYYN6uIWyUtpaeb8pCNH4Prr4fHHbSeSQKBCRoJekSIwdaq5HjvWnPUiIrnv1VdhxQrInx/eeQdCQ20nkkCgQkYEuP12M/kQzCqmQ4dsphEJPL/8AoMHm+tXX9VZSpJ7VMiI/H8vvwyXXw47dmQuCxWRi5ecDPfdBykp5gDXbt1sJ5JAokJG5P/Lnx/efRdCQuC998xNRC7ewIHw009QtCi88YaZmyaSW1TIiJziuutg6FBz3asXbN5sN4+I2y1aZIaSAN56C2Jj7eaRwKNCRuRfBg2CG280KyvuvVcHS4pcqD17zColMMO1zZrZzSOBSYWMyL+EhZlhpUKF4L//hWHDbCcScZ/0dDNxfu9eqFxZB7RK3vHrQmbYsGF4PJ4st0qVKtmOJUGgdGkzlg/m+IKvvrKbR8Rtxo41w0r58sGsWRAVZTuRBCq/LmQArr76anbt2pVxW7lype1IEiTuvtusrnAcs+vvgQO2E4m4w48/whNPmOvRo+Hqq+3mkcDm94VMWFgYsbGxGbeiRYvajiRBZMwYqFgRdu40Y/3p6bYTifi3xERo08bMLWvZMnN/JpG84veFzB9//EHJkiUpX748HTp0YPv27bYjSRDJnx9mz4bISFi40Ow1IyLZcxzo3h02bYL4eHjzTS21lrwXZjvA2dSpU4fp06dTsWJFdu3axfDhw7nppptYv349MTEx2X5OcnIyycnJGe8nJiYCkJqaSqqWn2S0gdoi5666Cl591cNDD4UxaJBD7dpp3HCDc9bPUTv7htrZN3LazpMmhfDBB6GEhTnMnJlGgQKOVv2dB/0+Z5XTdvA4jnP2/5H9yKFDhyhTpgyjR4/mgQceyPYxw4YNY/jw4afdP3PmTKKjo/M6ogQox4FXX72WFSviKVLkOKNHL6NgwRTbsUT8xqZNBXnyyZs4eTKUrl3X06LFn7YjicslJSXRvn17Dh8+TIECBc74OFcVMgC1atWiQYMGjBo1KtuPZ9cjEx8fz/79+8/aEMEiNTWVhIQEGjZsSHh4uO04rnL0KNStG8bGjR4aNUrnk0/SCDnD4Kza2TfUzr5xrnY+dAjq1AljyxYPzZql89FHaRpSugD6fc4qMTGRokWLnrOQ8euhpX87evQof/75J/fdd98ZHxMZGUlkZORp94eHh+sX4xRqj/N36aXw0UdQuzYsXhzCyy+HZByCdyZqZ99QO/tGdu3sOGZC75YtULYsvP12CBERfj/90q/p99nIaRv49W/bo48+yvLly9m6dSurVq2iVatWhIaGcu+999qOJkGqcmUYP95cDxkCCQl284jY9sorMGcOhIfDBx+Ygl/El/y6kNmxYwf33nsvFStWpE2bNhQpUoQ1a9ZQrFgx29EkiHXtCvffb5Zit2sHW7faTiRix5dfZu4XM2YM1KplNY4EKb8eWpo1a5btCCLZGj8efv4Zvv8e7roLvvlGO5dKcNm+Hdq2zTyKoFcv24kkWPl1j4yIv8qXDz7+GIoWNbuY9uxp5gqIBIMTJ0wBv38/XHstTJig/WLEHhUyIheodGkzJyAkBN55x/xnLhLoHAceegjWroUiRcz8GPVGik0qZEQuwi23ZJ7q278/6CgwCXSTJ8O0aaaAnzULypSxnUiCnQoZkYs0YICZK3DypOlu37bNdiKRvLFsmYe+fc31qFHQoIHdPCKgQkbkonk8MHUqVK8O+/ZB8+Zm8zyRQLJrVzTt2oVy8iS0bw+PPWY7kYihQkYkF+TPD/PnQ4kSZjVT586hOilbAsbhw/Dcc9fxzz8eatfWYZDiX1TIiOSS+HiYN8+clP3ppyG8997/2Y4kctHS0uC++0LZsSOGyy5zmDdPk3vFv6iQEclF111n/loF+PjjK5k5U3+2irs9/jgsWhRCRMRJPv74JHFxthOJZKVCRiSXdewIjz2WBsCDD4ZqJZO41pQpMHq0ue7X70euvdZuHpHsqJARyQPPPptOnTq7SE720KIFbNxoO5HI+fnss8zdeocMSeOGG3baDSRyBipkRPJASAgMGLCWWrXS+ecfuOMO2LvXdiqRnPnhB2jTJvP4gcGDNXNd/JcKGZE8EhmZxty5aZQvD5s3Q7NmkJRkO5XI2W3bBk2bwrFj0LChGV7SCiXxZypkRPJQ8eLw+edQuDD8979m/420NNupRLJ38CDcfjvs3g1VqsBHH0F4uO1UImenQkYkj115JXzyiVmWPX8+PPywDpgU/3PiBLRqBb/9BpddBgsXQoECtlOJnJsKGREfuOEGePdd00U/YQIMH247kUimkyehXTtYvhxiYkwRU6qU7VQiOaNCRsRH7rkHxo8318OHw2uv2c0jAmZCb/fuprfQbOYIVavaTiWScypkRHyoVy945hlz3a8fvPee3TwS3BzHnJk0fTqEhsIHH8DNN9tOJXJ+VMiI+NhTT5l5MmCWti5caDWOBLEXXsjc8G7qVHPgqYjbqJAR8TGPB1591ewAfPIk3H03LFtmO5UEm4kTYeBAcz16NHTubDePyIVSISNiQUgIvPUW3HmnWS1y553oKAPxmTffhIceMteDBsEjj9jNI3IxVMiIWBIeDh9+aDYdO3bM7P67Zo3tVBLo3n4bevQw1488AiNG2M0jcrFUyIhYlC8fzJsHt9wCR45Akybw/fe2U0mgmjkTunY1k3x794ZXXtGuveJ+KmRELIuONkteb7oJDh+GRo1g3TrbqSTQfPQRdOpkipgePczyfxUxEghUyIj4gfz5zeqlunXNNvG33qqeGck9779vNrxLSzMr5SZONPO0RAKBfpVF/ERMjDmX6brrTDFz222wapXtVOJ206ZBhw6miOnUyUz0VREjgUS/ziJ+pGBBWLwY6tWDxEQzzPTVV7ZTiVtNmAD33585nDRtmtn4TiSQqJAR8TPenplTVzMtWmQ7lbjN6NFmQi+YDRgnTVJPjAQm/VqL+KHoaHNitnefmRYtzGRNkXNxHHOW13/+Y95/8kkYM0YTeyVwqZAR8VP58sHHH5vDJlNSoE0bM1QgciZpaeY8r2HDzPvPPAMjR6qIkcCmQkbEj0VEmBUnPXtm7v3x1FPmWuRUJ06YonfyZFO4TJgATz+tIkYCnwoZET8XGmpelIYPN+8/9xx0727OaRIBOHTITAyfO9cUvx9+aHpmRIKBChkRF/B4YMgQ89d2SIg5qbhVKzh61HYysW3bNrOZ4tdfQ4ECZtVb69a2U4n4jgoZERfp0cPMm8mXDxYsgBtvhL/+sp1KbFmzBmrXhvXrIS7OFDM332w7lYhvqZARcZmWLc3eMiVKwE8/mRey//7XdirxtVmzoH592LsXqlaFb7+FKlVspxLxPRUyIi503XXmheuaa2D3bvNX+Acf2E4lvuBdXn3vvZCcDM2bw8qVEB9vO5mIHSpkRFyqTBn45hto2tSsWGnb1qxoSkuznUzyypEjZhm+d3n1o4/CnDlwySVWY4lYpUJGxMViYmD+fBgwwLz/3HNmJ+ADB+zmkty3YQPUqWM2RgwPhzfegJde0pEDIipkRFwuNBReeQVmzICoKLNqpUYNWLvWdjLJLXPmmLlQv/0GJUvC8uXQrZvtVCL+QYWMSIDo0MGsYqlQwSzJveEGs0xbm+e5V2oqPPGEWU595IiZ3PvDD1C3ru1kIv5DhYxIAKlSBb7/Hpo1MxNBu3WD9u3NhmniLps3m/1hXnzRvP/oo5CQYFariUgmFTIiAaZQIZg3D0aNMsNOs2ZBtWqwapXlYJJjM2ean9m330LBgman3pdegrAw28lE/I8KGZEAFBJiTj1euRLKlTNDTfXqwbPPalWTPztyBDp3NsOER46Y4cGffoK777adTMR/qZARCWDXXQc//miGl9LSzDEHN95oVsCIf1m61AwNvvOOKUSHDoVly8wyexE5MxUyIgGuYEGzountt81ZPGvWmGGLF1/UwZP+IDHRnG7eoAFs3WoKl2XLzF4xGkoSOTcVMiJBwOOBTp3MmTxNmpiJwE88YYYufv3VdrrglZBgdmeePNm8/9BD8MsvZpKviOSM6n3AcRxOnjxJWhBMHkhNTSUsLIwTJ04ExfcLEBoaSlhYGB6Px3YU6+Lj4bPPYPp0eOQRc0ZTtWpmRczgwZA/v+2EwWHXLtPmM2ea98uVM0vlb7nFbi4RNwr6QiYlJYVdu3aRlJRkO4pPOI5DbGwsf/31V1C9sEdHRxMXF0dERITtKNZ5PNC1KzRqZIY0FiwwK5xmzIAxY6BVK/MYyX0nT8Lrr5u5SkeOmHbu0wdGjtQxAyIXKqgLmfT0dLZs2UJoaCglS5YkIiIi4F/c09PTOXr0KJdccgkhIYE/sug4DikpKezbt48tW7ZwxRVXBMX3nROXXQaffGJu/fqZlU2tW0PjxqagqVTJdsLAsnw59O1rho7A7NQ7YYLZhVlELlxQFzIpKSmkp6cTHx9PdHS07Tg+kZ6eTkpKCvny5QuaF/SoqCjCw8PZtm1bxvcuhscDLVpAw4amV+bFF+GLL6ByZXjgATPhNC7Odkp3W7/eLIVfuNC8X6QIPP883H+/WZ0kIhdH/4wgaF7Qg5l+xmcXHW32mFm/Hpo3N0u1p0yByy+Hp582K2vk/OzYYYqVqlVNERMaaibzbtxodlzWr6RI7tA/JRHJcMUV5jTtFSvMHjRJSTBiBJQvb+ZxHD5sO6H/277dDCFdcQVMmwbp6WZDu19/hfHjTY+MiOQeFTIicpqbbjJHGsyZAxUrwoEDZlVTmTLw1FOwf7/thP5n0ybT03L55WZC74kTZjflNWvMEQNXXmk7oUhgUiHjQo7j0KNHDwoXLozH42HdunUAHDhwgOLFi7N169YcPU9KSgply5bl+++/z7uwF+A///kPHo+Hu+66K2iWiPsjj8esYFq/3qxouuoq0yPz3HOmoOnb1wyTBDPHMcdAtGtnCr6pU82J1bfcYnbqXbYM6tSxnVIksKmQcaFFixYxffp0FixYwK5du6hcuTIAzz33HC1atKBs2bI5ep6IiAgeffRRnnjiiTxMe35GjhzJlClTmDx5MqtXr6Znz56nPWbZsmW0aNGCuLg48ufPT7Vq1XjvvfcspA0OYWHm7J9ffoGPP4ZrrzVDTq+/blY2NWpkVj4FU82ZlARvvgnVq5veq9mzzRBS06amJ+vLL+HWW7WMXcQXVMi40J9//klcXBzXX389sbGxhIWFkZSUxNSpU3nggQfO67k6dOjAypUr+d///pdHaXNuypQpvPzyyyxZsoQePXqwYsUKvvjiCwYOHJjlcatWraJKlSp8/PHH/Pzzz3Tt2pVOnTqxYMECS8mDQ0gI3HUXfP89LF5sJgV7PGZ32hYtzDyap58O3F4ax4HVq82E3VKloHt3c6BjVJRZ4bVundmTp25d20lFgowT4A4fPuwAzuHDh0/72PHjx51ff/3VOX78uOM4jpOe7jhHj9q5pafn7Pvp3LmzA2TcypQp4ziO43z44YdOsWLFsjx2+PDhTlxcnLN///6M+26//XbnxhtvdFJTUzPuu+WWW5ynnnrqPFs257LLcccddzj169d30tLSMvLHxsY669aty/K527Ztcy6//HLnlVdeOevXuOOOO5yuXbue8eP//lnntZSUFGfevHlOSkqKT76eLVu2OM7jjztO4cKOY17qza1WLccZO9Zxdu3K26/vi3beuNFxhg51nAoVsn6P5co5zssvO86BA3n2pf1GsPw+26Z2zupsr9+nCup9ZP4tKcne7ppHj+Zse/ixY8dSoUIFpkyZwnfffUdoaCgAX3/9NTX+tbPW4MGDWbRoEd26dWPu3LmMHz+e1atXs2LFiizLkWvXrs3XX3991q97yTkapmPHjkyaNCnbj2WXY9WqVfz0008ZOe6++27uvvvu0z63dOnS/PHHH2f92gCHDx/m//7v/875OMldZcvCCy+Y/WbmzzdzaRYtgu++M7d+/czGb82awZ13mqXI/j7ccvIkfPMNfPqpuf3+e+bH8uc3vVIdO8Jtt5kl1SJilysKmfHjx/PSSy+xe/duqlatyrhx46hdu7btWFYULFiQmJgYQkNDiY2Nzbh/27ZtlCxZMstjQ0NDmTFjBtWqVePJJ5/ktddeY8qUKcTHx2d5XMmSJdm2bdtZv653QvGZFChQ4Iwfyy7Hm2++SenSpc/6nDn1wQcf8N133zHZe/Ke+FxUlJnw2q4d7N1r5oy89x58+605z+m//zXDTqVKmYmw9eqZ2xVX2C9s0tLMENGKFea2bBkcPJj58fBwU7R07AgtW+o8KhF/4/eFzOzZsxkwYACTJk2iTp06jBkzhsaNG7Nx40aKFy+eq18rOtr0jNhwsRsLHz9+PNsda8uXL8/LL7/Mgw8+SNu2bWnfvj2J/9rdLCoq6pxnTV1++eUXlS+7HLnhq6++omvXrrzxxhtcffXVufKccnGKFzcrmvr2NYcjLlxoejYSEswmce++a24AJUqY/WqqVoUqVcytQoW82ywuJQU2bICffza3devM8ugjR7I+rkgRuOMO05PUuDGcpU4XEcv8vpAZPXo03bt3p2vXrgBMmjSJhQsX8tZbb/Hkk0/m6tfyeNz711bRokU5eOqfkadYsWIFoaGhbN26lZMnT5728X/++YdixYqd9fkvZmjpTDnCwi7u12/58uU0a9aMV199lU6dOl3Uc0neiIsze6t06wbHj8PXX5vbihWmt2bPHjMkNX9+5udER5shq9KlzTLvMmXM8xQqBAULZt7CwsxS5717o9i2zcxcOXTILBE/fNj0qvz9tzlDats2s1Hdtm3mc/6tYEG44YbMnqLatTVsJOIWfl3IpKSksHbt2iyrVkJCQmjQoAGrV6/O9nOSk5NJTk7OeN/b+5Camkrqv/4HS01NxXEc0tPTSU9Pz4PvIG84jgOQJbN3CfK/v4/Zs2czZ84cvvzyS9q1a8ezzz7Lf/7zn4zvG+CXX36hWrVqZ22DH3744ayZChQocNbP/3eOZ555hmHDhp3rWz2jZcuW0bx5c55//nm6det2zp9feno6juOQmpqaMa8oL3l/1/79OxfMwsLMsNItt5j3T5yAtWs9/Pijh59/9vDLL/C//3lISvLw669mJ9xzCwcanVeOggUdrrnGoUoV8/baax2qVMlauKSnm5sY+n32DbVzVjltB78uZPbv309aWholSpTIcn+JEiXYsGFDtp8zatQohg8fftr9ixcvPu1gyLCwMGJjYzl69CgpKSm5FzyPnThxgvT09CxDRNdffz2DBg1i+/btFCpUCIC///6bhx56iGHDhlGlShXGjRtHu3btqFevHrVq1cr43BUrVjBo0KDThpxOlZNhvDN9/ply3HTTTVly5NTXX39Nu3btePDBB2nYsGHGZOCIiAguvfTSbD8nJSWF48ePs2LFimx7pfJKQkKCz76WW5Uvb24tW5r5Knv25Gffvmj27o1i375o9u2L4tChSJKSwjl2zNySksJwnKyTa0JD04mOPkn+/Knkz59KdHQqhQufoFix4xQrlkTx4scpXvwYRYueyDIvZ9cuc5Nz0++zb6idjXNNefDyON4/7/3Qzp07ueyyy1i1ahV1T9mc4fHHH2f58uV8++23p31Odj0y8fHx7N+//7QJqSdOnOCvv/6ibNmyrjoReezYsYwdO5bNmzdnub9u3bp06dKFBx98EMdxaNy4MaGhoXz22Wd4/v//3P369WPhwoX8+OOPxMTEsHr1au6880527NhBVFRUrmc9W47PP/+cH3744ZzDVv/WtWtX3nnnndPuv/nmm/nyyy+z/ZwTJ06wdetW4uPjffKzTk1NJSEhgYYNGxIeHp7nXy9YqZ19Q+3sG2rnrBITEylatCiHDx8+64ISv+6RKVq0KKGhoezZsyfL/Xv27MmyYudUkZGRREZGnnZ/eHj4ab8YaWlpeDweQkJCXHU68iOPPMIjjzxy2v1Dhgzhscce48EHHyQ0NJQlS5ac9pixY8fy7LPPEhMTQ0hICK+99hqPPfYY+fNwclB2OcaNG3fBz/f222/z9ttvn9fnhISE4PF4sv09yEu+/nrBSu3sG2pn31A7GzltA79+9Y6IiKBGjRosXbo047709HSWLl2apYdGjKZNm9KjRw/+/vvvHD0+JSWFa665JtuiSERExA38ukcGYMCAAXTu3JmaNWtSu3ZtxowZw7FjxzJWMUlW/fv3z/FjIyIieOqpp/IujIiISB7z+0Kmbdu27Nu3jyFDhrB7926qVavGokWLTpsALCIiIsHH7wsZgD59+tCnTx/bMURERMTP+PUcGV/x44Vbkkv0MxYRCUxBXch4Z0TndK26uJf3Z6yVACIigcUVQ0t5JTQ0lEKFCrF3714AoqOjM/Y5CVTp6emkpKRw4sQJVy05v1CO45CUlMTevXspVKiQT3b1FRER3wnqQgbI2I/GW8wEOsdxOH78OFFRUQFftJ2qUKFCZ9x7SERE3CvoCxmPx0NcXBzFixcPivMtUlNTWbFiBfXq1QuaYZbw8HD1xIiIBKigL2S8QkNDg+LFLjQ0lJMnT5IvX76gKWRERCRwBf4kCREREQlYKmRERETEtVTIiIiIiGsF/BwZ70ZoiYmJlpP4h9TUVJKSkkhMTNQcmTykdvYNtbNvqJ19Q+2clfd1+1wbmgZ8IXPkyBEA4uPjLScRERGR83XkyBEKFix4xo97nADfuz09PZ2dO3cSExMTVPumnEliYiLx8fH89ddfFChQwHacgKV29g21s2+onX1D7ZyV4zgcOXKEkiVLnnUD14DvkQkJCaFUqVK2Y/idAgUK6B+KD6idfUPt7BtqZ99QO2c6W0+Mlyb7ioiIiGupkBERERHXUiETZCIjIxk6dCiRkZG2owQ0tbNvqJ19Q+3sG2rnCxPwk31FREQkcKlHRkRERFxLhYyIiIi4lgoZERERcS0VMiIiIuJaKmSE5ORkqlWrhsfjYd26dbbjBJStW7fywAMPUK5cOaKioqhQoQJDhw4lJSXFdjTXGz9+PGXLliVfvnzUqVOH//73v7YjBZxRo0ZRq1YtYmJiKF68OC1btmTjxo22YwW8559/Ho/HQ//+/W1HcQUVMsLjjz9OyZIlbccISBs2bCA9PZ3Jkyfzv//9j1dffZVJkyYxaNAg29Fcbfbs2QwYMIChQ4fyww8/ULVqVRo3bszevXttRwsoy5cvp3fv3qxZs4aEhARSU1Np1KgRx44dsx0tYH333XdMnjyZKlWq2I7iGlp+HeQ+//xzBgwYwMcff8zVV1/Njz/+SLVq1WzHCmgvvfQSEydOZPPmzbajuFadOnWoVasWr7/+OmDOVIuPj6dv3748+eSTltMFrn379lG8eHGWL19OvXr1bMcJOEePHuXaa69lwoQJjBgxgmrVqjFmzBjbsfyeemSC2J49e+jevTvvvvsu0dHRtuMEjcOHD1O4cGHbMVwrJSWFtWvX0qBBg4z7QkJCaNCgAatXr7aYLPAdPnwYQL+/eaR37940bdo0y++2nFvAHxop2XMchy5dutCzZ09q1qzJ1q1bbUcKCps2bWLcuHG8/PLLtqO41v79+0lLS6NEiRJZ7i9RogQbNmywlCrwpaen079/f2644QYqV65sO07AmTVrFj/88APfffed7Siuox6ZAPPkk0/i8XjOetuwYQPjxo3jyJEjDBw40HZkV8ppO5/q77//pkmTJtxzzz10797dUnKRC9O7d2/Wr1/PrFmzbEcJOH/99Rf9+vXjvffeI1++fLbjuI7myASYffv2ceDAgbM+pnz58rRp04ZPP/0Uj8eTcX9aWhqhoaF06NCBt99+O6+julpO2zkiIgKAnTt3Ur9+fa677jqmT59OSIj+hrhQKSkpREdH89FHH9GyZcuM+zt37syhQ4eYP3++vXABqk+fPsyfP58VK1ZQrlw523ECzrx582jVqhWhoaEZ96WlpeHxeAgJCSE5OTnLxyQrFTJBavv27SQmJma8v3PnTho3bsxHH31EnTp1KFWqlMV0geXvv//mlltuoUaNGsyYMUP/IeWCOnXqULt2bcaNGweYYY/SpUvTp08fTfbNRY7j0LdvX+bOncuyZcu44oorbEcKSEeOHGHbtm1Z7uvatSuVKlXiiSee0FDeOWiOTJAqXbp0lvcvueQSACpUqKAiJhf9/fff1K9fnzJlyvDyyy+zb9++jI/FxsZaTOZuAwYMoHPnztSsWZPatWszZswYjh07RteuXW1HCyi9e/dm5syZzJ8/n5iYGHbv3g1AwYIFiYqKspwucMTExJxWrOTPn58iRYqoiMkBFTIieSghIYFNmzaxadOm0wpEdYZeuLZt27Jv3z6GDBnC7t27qVatGosWLTptArBcnIkTJwJQv379LPdPmzaNLl26+D6QSDY0tCQiIiKupRmHIiIi4loqZERERMS1VMiIiIiIa6mQEREREddSISMiIiKupUJGREREXEuFjIiIiLiWChkRERFxLRUyIiIi4loqZERERMS1VMiIiKvs27eP2NhYRo4cmXHfqlWriIiIYOnSpRaTiYgNOmtJRFzns88+o2XLlqxatYqKFStSrVo1WrRowejRo21HExEfUyEjIq7Uu3dvlixZQs2aNfnll1/47rvviIyMtB1LRHxMhYyIuNLx48epXLkyf/31F2vXruWaa66xHUlELNAcGRFxpT///JOdO3eSnp7O1q1bbccREUvUIyMirpOSkkLt2rWpVq0aFStWZMyYMfzyyy8UL17cdjQR8TEVMiLiOo899hgfffQRP/30E5dccgk333wzBQsWZMGCBbajiYiPaWhJRFxl2bJljBkzhnfffZcCBQoQEhLCu+++y9dff83EiRNtxxMRH1OPjIiIiLiWemRERETEtVTIiIiIiGupkBERERHXUiEjIiIirqVCRkRERFxLhYyIiIi4lgoZERERcS0VMiIiIuJaKmRERETEtVTIiIiIiGupkBERERHXUiEjIiIirvX/AFbaePuBAZQGAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 定义函数\n",
    "def f(x):\n",
    "    return x**2\n",
    "\n",
    "# 生成 x 值范围\n",
    "x_values = np.linspace(-5, 5, 100)\n",
    "\n",
    "# 计算对应的 y 值\n",
    "y_values = f(x_values)\n",
    "\n",
    "# 绘制函数图像\n",
    "plt.plot(x_values, y_values, label='f(x) = x^2', color='blue')\n",
    "plt.xlabel('x')\n",
    "plt.ylabel('f(x)')\n",
    "plt.title('Plot of f(x) = x^2')\n",
    "plt.grid(True)\n",
    "plt.legend()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from PIL import Image\n",
    "\n",
    "# 创建一个红色的位图（100x100像素）\n",
    "bitmap_image = Image.new('RGB', (100, 100), color=(255, 0, 0))\n",
    "\n",
    "# 保存位图\n",
    "bitmap_image.save('red_bitmap.jpg')\n",
    "\n",
    "# 显示位图\n",
    "bitmap_image.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from PIL import Image\n",
    "\n",
    "# 创建一个灰度图（100x100像素）\n",
    "gray_image = Image.new('L', (100, 100), color=127)\n",
    "\n",
    "# 保存灰度图\n",
    "gray_image.save('gray_image.jpg')\n",
    "\n",
    "# 显示灰度图\n",
    "gray_image.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "权重矩阵W1的形状： (128, 784)\n",
      "权重矩阵W1的示例值： [[0.755266   0.79087367 0.33133758 ... 0.60143973 0.32897856 0.16199021]\n",
      " [0.72899916 0.44037862 0.37113609 ... 0.47347094 0.18952038 0.28200236]\n",
      " [0.41097996 0.04710418 0.05868761 ... 0.74693106 0.69848076 0.61964092]\n",
      " ...\n",
      " [0.15013018 0.36791033 0.5535499  ... 0.53719201 0.80652619 0.1744901 ]\n",
      " [0.33571245 0.93362538 0.37051054 ... 0.89197058 0.94898205 0.54449679]\n",
      " [0.90832102 0.4918258  0.65476481 ... 0.25713305 0.46076715 0.62072658]]\n",
      "隐藏层输入的示例值： [195.76330042 200.54054249 205.63422172 209.97159893 203.08664281\n",
      " 205.23411084 203.52615522 205.56050772 207.09108223 208.68339036\n",
      " 213.051538   196.76211398 204.50240183 207.9319599  194.90461699\n",
      " 206.29672925 200.57127704 206.81833587 203.32433933 210.02936006\n",
      " 205.60546771 204.01475474 199.04604495 201.29074735 208.73917491\n",
      " 209.93820792 211.29447926 205.69584215 214.19332716 206.61544532\n",
      " 199.87660833 211.25210559 212.37301834 200.32293848 196.62020888\n",
      " 210.04280759 209.85793172 211.80582468 205.51680916 205.18258771\n",
      " 212.59128416 212.90639817 207.7058475  207.12638811 204.49131551\n",
      " 200.32217042 207.99575138 203.48836654 203.06109351 208.1956029\n",
      " 207.44161862 204.42189765 208.29466425 210.13001803 201.65480128\n",
      " 200.16511617 206.26366159 210.94583471 210.45175329 207.29544033\n",
      " 202.91291561 205.83616963 199.30316165 205.07775703 202.95139886\n",
      " 204.9268737  205.78370195 207.70586988 209.65286466 207.47503336\n",
      " 198.42903544 205.74965228 207.45025594 211.92956086 203.0781555\n",
      " 213.73586754 206.95474588 196.56660345 211.30049523 200.04505833\n",
      " 202.20250576 206.69234931 208.60447707 197.36259506 204.07465054\n",
      " 209.87141072 204.60650965 206.52575017 209.95750036 216.25375879\n",
      " 211.62077048 209.94770942 214.93808132 204.52056599 206.91332428\n",
      " 210.86379006 203.05021291 202.64380023 203.35018801 201.01467519\n",
      " 202.51838252 210.59516059 203.25513234 206.88052746 206.48287579\n",
      " 208.1493593  202.18276196 202.19134368 204.77746791 200.59590609\n",
      " 208.71319818 203.68639797 199.86779692 204.59521209 206.68676435\n",
      " 206.14909026 204.27945505 211.14013663 209.51566763 198.18589956\n",
      " 214.02720035 201.17848772 202.87756573 205.86624913 214.91229692\n",
      " 200.14127473 207.28625192 206.03864013]\n",
      "隐藏层输出的示例值： [195.76330042 200.54054249 205.63422172 209.97159893 203.08664281\n",
      " 205.23411084 203.52615522 205.56050772 207.09108223 208.68339036\n",
      " 213.051538   196.76211398 204.50240183 207.9319599  194.90461699\n",
      " 206.29672925 200.57127704 206.81833587 203.32433933 210.02936006\n",
      " 205.60546771 204.01475474 199.04604495 201.29074735 208.73917491\n",
      " 209.93820792 211.29447926 205.69584215 214.19332716 206.61544532\n",
      " 199.87660833 211.25210559 212.37301834 200.32293848 196.62020888\n",
      " 210.04280759 209.85793172 211.80582468 205.51680916 205.18258771\n",
      " 212.59128416 212.90639817 207.7058475  207.12638811 204.49131551\n",
      " 200.32217042 207.99575138 203.48836654 203.06109351 208.1956029\n",
      " 207.44161862 204.42189765 208.29466425 210.13001803 201.65480128\n",
      " 200.16511617 206.26366159 210.94583471 210.45175329 207.29544033\n",
      " 202.91291561 205.83616963 199.30316165 205.07775703 202.95139886\n",
      " 204.9268737  205.78370195 207.70586988 209.65286466 207.47503336\n",
      " 198.42903544 205.74965228 207.45025594 211.92956086 203.0781555\n",
      " 213.73586754 206.95474588 196.56660345 211.30049523 200.04505833\n",
      " 202.20250576 206.69234931 208.60447707 197.36259506 204.07465054\n",
      " 209.87141072 204.60650965 206.52575017 209.95750036 216.25375879\n",
      " 211.62077048 209.94770942 214.93808132 204.52056599 206.91332428\n",
      " 210.86379006 203.05021291 202.64380023 203.35018801 201.01467519\n",
      " 202.51838252 210.59516059 203.25513234 206.88052746 206.48287579\n",
      " 208.1493593  202.18276196 202.19134368 204.77746791 200.59590609\n",
      " 208.71319818 203.68639797 199.86779692 204.59521209 206.68676435\n",
      " 206.14909026 204.27945505 211.14013663 209.51566763 198.18589956\n",
      " 214.02720035 201.17848772 202.87756573 205.86624913 214.91229692\n",
      " 200.14127473 207.28625192 206.03864013]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "# 输入层节点数\n",
    "input_layer_size = 28 * 28  # 对应于784个输入特征\n",
    "\n",
    "# 隐藏层节点数\n",
    "hidden_layer_size = 128\n",
    "\n",
    "# 初始化权重矩阵W1，从输入层到隐藏层\n",
    "# 形状为 (隐藏层节点数, 输入层节点数)\n",
    "W1 = np.random.rand(hidden_layer_size, input_layer_size)\n",
    "\n",
    "# 打印权重矩阵的形状和一个示例\n",
    "print(\"权重矩阵W1的形状：\", W1.shape)\n",
    "print(\"权重矩阵W1的示例值：\", W1)\n",
    "\n",
    "# 示例输入数据（28x28像素的灰度图像展平为一维向量）\n",
    "input_data = np.random.rand(input_layer_size)\n",
    "\n",
    "# 计算隐藏层输入：加权和\n",
    "# 矩阵乘法：隐藏层输入 = 权重矩阵W1 × 输入数据\n",
    "hidden_layer_input = np.dot(W1, input_data)\n",
    "\n",
    "# 偏置向量\n",
    "b1 = np.random.rand(hidden_layer_size)\n",
    "\n",
    "# 加上偏置\n",
    "hidden_layer_input += b1\n",
    "\n",
    "# 激活函数（例如ReLU）\n",
    "def relu(x):\n",
    "    return np.maximum(0, x)\n",
    "\n",
    "# 计算隐藏层输出\n",
    "hidden_layer_output = relu(hidden_layer_input)\n",
    "\n",
    "# 打印隐藏层输入和输出的示例值\n",
    "print(\"隐藏层输入的示例值：\", hidden_layer_input)\n",
    "print(\"隐藏层输出的示例值：\", hidden_layer_output)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArMAAAIjCAYAAAAQgZNYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABtIElEQVR4nO3dd3gU5d7G8XsTUgmhmEDooaiAVEFiQAWUjiiKiFgoKmAB5aAHRKUqoqiIlaICegTFinpAisGgQgSlqNQjSJESOgQIJJvsvH/Mm4UluyGbspNNvp/r2mtnZ57Z+e2TMd5Mnn3GZhiGIQAAAMAPBVhdAAAAAJBXhFkAAAD4LcIsAAAA/BZhFgAAAH6LMAsAAAC/RZgFAACA3yLMAgAAwG8RZgEAAOC3CLMAAADwW4RZALkWGxur/v37W11GjubMmSObzaZdu3Zdsm1R+zyJiYmy2WxKTEz0+bF37dolm82mOXPm+PzY/sib8wxA4SLMAtCff/6pO+64QzVr1lRoaKiqVq2qDh066M0337S6tCLlxIkTCg0Nlc1m05YtW/L8Pu+8845loXHevHmaOnWqJcf2pH///rLZbG4fixcvtrS2F154QQsWLLC0BgA5sxmGYVhdBADrrFq1Su3atVONGjXUr18/xcTE6J9//tEvv/yiHTt2aPv27c62aWlpCggIUFBQkIUV5ywzM1N2u10hISGy2Ww5to2NjVXbtm1zHSzfffddPfbYYypXrpweeOABPf/883mqsWHDhoqKisp2BdbhcCg9PV3BwcEKCCicaw0333yzNm7cmO2KomEYSktLU1BQkAIDAwvl2J70799fn3zyid57771s22666SZVrlzZp/VcKCIiQnfccUe2c8Sb8wxA4SpldQEArDVx4kSVLVtWv/76q8qVK+ey7dChQy6vQ0JCfFhZ3gQGBhZaGPvoo4/UtWtX1axZU/PmzctzmPUkICBAoaGhBfqeuWWz2Sw7tiSVKlVK9957r2XH91ZhnmcAvMMwA6CE27Fjh6666qpsQVaSKlas6PLa3RjTP/74Q23atFFYWJiqVaum559/XrNnz842njA2NlY333yzEhMT1aJFC4WFhalRo0bOq5NffvmlGjVqpNDQUDVv3lzr16/PVs/y5ct1/fXXq3Tp0ipXrpxuvfXWbH/udzeW0TAMPf/886pWrZrCw8PVrl07bdq0yat+2rNnj3766Sfddddduuuuu7Rz506tWrXKbduPPvpILVu2VHh4uMqXL68bbrhBS5cudfbDpk2btGLFCuef0tu2bSsp+5jZIUOGKCIiQqmpqdmO0adPH8XExCgzM1OS9PXXX6tbt26qUqWKQkJCVKdOHT333HPO7ZLUtm1bLVy4ULt373YeOzY2VpLnMbO56fNx48bJZrNp+/bt6t+/v8qVK6eyZctqwIABbmv3lqexxO5q7t+/vyIiIrRv3z716NFDERERio6O1pNPPunSF5J5Jfz11193nnfR0dHq3LmzfvvtN0lmwD9z5ow++OADZ39lnf+exsy+8847uuqqqxQSEqIqVaro0Ucf1YkTJ1zatG3bVg0bNtTmzZvVrl07hYeHq2rVqpo8eXK++wooibgyC5RwNWvWVFJSkjZu3KiGDRt6te++ffvUrl072Ww2jRo1SqVLl9Z7773n8Qru9u3bdffdd2vw4MG699579corr6h79+6aPn26nn76aT3yyCOSpEmTJunOO+/Utm3bnH9u//7779WlSxfVrl1b48aN09mzZ/Xmm2+qdevWWrdunTOUuTNmzBg9//zz6tq1q7p27ap169apY8eOSk9Pz/Vn/fjjj1W6dGndfPPNCgsLU506dTR37ly1atXKpd348eM1btw4tWrVShMmTFBwcLBWr16t5cuXq2PHjpo6daqGDh2qiIgIPfPMM5KkSpUquT1m79699fbbb2vhwoXq1auXc31qaqq+/fZb9e/f33l1cM6cOYqIiNDw4cMVERGh5cuXa8yYMUpJSdHLL78sSXrmmWd08uRJ7d27V6+99pok88/onnjb53feeadq1aqlSZMmad26dXrvvfdUsWJFvfTSS7nq4yNHjri8DgoKUtmyZXO174UyMzPVqVMnxcXF6ZVXXtH333+vV199VXXq1NHDDz/sbPfAAw9ozpw56tKlix588EFlZGTop59+0i+//KIWLVroP//5jx588EG1bNlSgwYNkiTVqVPH43HHjRun8ePHq3379nr44Ye1bds2TZs2Tb/++qtWrlzpMjzn+PHj6ty5s26//Xbdeeed+vzzzzVy5Eg1atRIXbp08fozAyWaAaBEW7p0qREYGGgEBgYa8fHxxogRI4wlS5YY6enp2drWrFnT6Nevn/P10KFDDZvNZqxfv9657ujRo0aFChUMScbOnTtd9pVkrFq1yrluyZIlhiQjLCzM2L17t3P9jBkzDEnGDz/84FzXtGlTo2LFisbRo0ed637//XcjICDA6Nu3r3Pd7NmzXY596NAhIzg42OjWrZvhcDic7Z5++mlDksvnyUmjRo2Me+65x2X/qKgow263O9f99ddfRkBAgHHbbbcZmZmZLvtfeOyrrrrKaNOmTbZj/PDDDy6f2+FwGFWrVjV69uzp0u7TTz81JBk//vijc11qamq29xs8eLARHh5unDt3zrmuW7duRs2aNbO13blzpyHJmD17tnNdbvt87NixhiTj/vvvd3nP2267zbjsssuyHeti/fr1MyRle2T10cX9klPNWe81YcIEl7bNmjUzmjdv7ny9fPlyQ5Lx2GOPZavnwp9V6dKl3Z4jns6zjh07uvzs33rrLUOSMWvWLOe6Nm3aGJKMDz/80LkuLS3NiImJyfazBnBpDDMASrgOHTooKSlJt9xyi37//XdNnjxZnTp1UtWqVfXNN9/kuO/ixYsVHx+vpk2bOtdVqFBB99xzj9v2DRo0UHx8vPN1XFycJOnGG29UjRo1sq3/+++/JUkHDhzQhg0b1L9/f1WoUMHZrnHjxurQoYMWLVrkscbvv/9e6enpGjp0qMsXdYYNG5bjZ7vQH3/8oT///FN9+vRxruvTp4+OHDmiJUuWONctWLBADodDY8aMyfYFrrx8Schms6lXr15atGiRTp8+7Vw/f/58Va1aVdddd51zXVhYmHP51KlTOnLkiK6//nqlpqZq69atXh87L33+0EMPuby+/vrrdfToUaWkpFzyeKGhoVq2bJnL49VXX/W67pxqyTqfJOmLL76QzWbT2LFjs+2bl59V1nk2bNgwl5/9wIEDFRkZqYULF7q0j4iIcBkjHBwcrJYtW7rUCCB3CLMAdM011+jLL7/U8ePHtWbNGo0aNUqnTp3SHXfcoc2bN3vcb/fu3apbt2629e7WSXIJrJKcf0KuXr262/XHjx93HkeSrrzyymzvWb9+fR05ckRnzpzxWKMkXX755S7ro6OjVb58ebf7XOyjjz5S6dKlVbt2bW3fvl3bt29XaGioYmNjNXfuXGe7HTt2KCAgQA0aNMjV++ZG7969dfbsWec/LE6fPq1FixapV69eLqFr06ZNuu2221S2bFlFRkYqOjraGZZOnjzp9XHz0ucX/3yz+jfr55iTwMBAtW/f3uXRvHlzr+uW5Bz/enEtF9axY8cOValSxSWo54en/goODlbt2rWd27NUq1YtW2i+uEYAucOYWQBOwcHBuuaaa3TNNdfoiiuu0IABA/TZZ5+5vXqVF56+/e1pvVEEZg40DEMff/yxzpw54zakHjp0SKdPn85x7Gl+XHvttYqNjdWnn36qu+++W99++63Onj2r3r17O9ucOHFCbdq0UWRkpCZMmKA6deooNDRU69at08iRI+VwOAqltosV1s/R05XSi7/Qdak6ipKifM4D/oYwC8CtFi1aSDL/3OxJzZo1XeahzeJuXX7UrFlTkrRt27Zs27Zu3aqoqCiVLl06x33/+usv1a5d27n+8OHDuboKtmLFCu3du1cTJkxQ/fr1XbYdP35cgwYN0oIFC3TvvfeqTp06cjgc2rx5s8vQi4t5+2fsO++8U6+//rpSUlI0f/58xcbG6tprr3VuT0xM1NGjR/Xll1/qhhtucK7fuXNnno+dnz4vaFlXeC+eFeDiq53eqFOnjpYsWaJjx47leHU2L/114XmWnp6unTt3qn379nmuFUDOGGYAlHA//PCD26tBWWMi3f2ZOUunTp2UlJSkDRs2ONcdO3bM5U/vBaFy5cpq2rSpPvjgA5dAs3HjRi1dulRdu3b1uG/79u0VFBSkN9980+Vz5vYuWFlDDP7973/rjjvucHkMHDhQl19+ufPz9ujRQwEBAZowYUK2q6EXHrt06dLZgllOevfurbS0NH3wwQdavHix7rzzTpftWVf5LjxGenq63nnnnWzvVbp06VwNO8hPnxe0mjVrKjAwUD/++KPLenefL7d69uwpwzA0fvz4bNvy8rNq3769goOD9cYbb7js//777+vkyZPq1q1bnmsFkDOuzAIl3NChQ5WamqrbbrtN9erVU3p6ulatWuW8AjhgwACP+44YMUIfffSROnTooKFDhzqn5qpRo4aOHTtWoHdGevnll9WlSxfFx8frgQcecE4TVbZsWY0bN87jfllzjE6aNEk333yzunbtqvXr1+u7775TVFRUjsdMS0vTF198oQ4dOni8ocAtt9yi119/XYcOHVLdunX1zDPP6LnnntP111+v22+/XSEhIfr1119VpUoVTZo0SZLUvHlzTZs2Tc8//7zq1q2rihUr6sYbb/RYx9VXX+1877S0NJchBpLUqlUrlS9fXv369dNjjz0mm82m//znP27/kdK8eXPNnz9fw4cP1zXXXKOIiAh1797d7XHz2ucFrWzZsurVq5fefPNN2Ww21alTR//973+z3dTDG+3atdN9992nN954Q3/99Zc6d+4sh8Ohn376Se3atdOQIUMkmf31/fffa8qUKapSpYpq1arl/ILihaKjozVq1CiNHz9enTt31i233KJt27bpnXfe0TXXXONXN4QA/I41kygAKCq+++474/777zfq1atnREREGMHBwUbdunWNoUOHGgcPHnRpe/HUXIZhGOvXrzeuv/56IyQkxKhWrZoxadIk44033jAkGcnJyS77duvWLdvxJRmPPvqoy7qsKZdefvlll/Xff/+90bp1ayMsLMyIjIw0unfvbmzevNmlzcVTJhmGYWRmZhrjx483KleubISFhRlt27Y1Nm7c6PbzXOiLL74wJBnvv/++xzaJiYmGJOP11193rps1a5bRrFkzIyQkxChfvrzRpk0bY9myZc7tycnJRrdu3YwyZcrkagoqwzCMZ555xpBk1K1b120dK1euNK699lojLCzMqFKlinOKtYvf7/Tp08bdd99tlCtXzpDknKbL3TRXhpG7Ps+amuvw4cMu6939LNzp16+fUbp06RzbHD582OjZs6cRHh5ulC9f3hg8eLCxceNGt1NzuXuvrBovlJGRYbz88stGvXr1jODgYCM6Otro0qWLsXbtWmebrVu3GjfccIMRFhbmMpWbp8/21ltvGfXq1TOCgoKMSpUqGQ8//LBx/PhxlzZt2rQxrrrqKrf94G7aNAA5sxkGo80BFKxhw4ZpxowZOn36tF98GQcA4L8YMwsgX86ePevy+ujRo/rPf/6j6667jiALACh0jJkFkC/x8fFq27at6tevr4MHD+r9999XSkqKRo8ebXVpAIASgDALIF+6du2qzz//XDNnzpTNZtPVV1+t999/32WKKAAACgtjZgEAAOC3GDMLAAAAv0WYBQAAgN8qcWNmHQ6H9u/frzJlyhTohO4AAAAoGIZh6NSpU6pSpYoCAnK+9lriwuz+/ftVvXp1q8sAAADAJfzzzz+qVq1ajm1KXJgtU6aMJLNzIiMjC/14drtdS5cuVceOHRUUFFTox/Mn9I179Itn9I17drtdM2fO1KBBg+iXi3DOuEe/eEbfuOfrfklJSVH16tWduS0nJS7MZg0t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ZrPJuGicht1uz9bu4s8myflZwsLCCrLUHFnRp7kOs998841zecmSJS5TNWRmZiohIUGxsbEFWhwAIGc//iilp9sUHJypK66wuhoUZTabVLq0uexwSJmZ5msfZNl8a9Cggcd5Za+88kp99NFHSktLU0iIOavHhV/Syqs6deooODhYK1euVM2aNSWZIfLXX3/NNo1Vlvr162v16tUu63755Zd81REdHa0DBw44X//1118uX1LLjcaNGyshIUHjx493uz04OPiSt5StV69ets+2cuVKXXHFFQoMtPYf0bkOsz169JBkJux+/fq5bAsKCnL7rTYAQOFatsx8joxMF3cthb87evSoevXqpfvvv1+NGzdWmTJl9Ntvv2ny5Mm69dZb3e5z991365lnntGgQYP01FNPac+ePXrllVck5e92qaVLl9bDDz+sf//736pQoYJq1KihyZMnKzU1VQ888IDbfR577DG1bt1ar7zyim699VYtWbJEixcvznMNknTjjTfqrbfeUnx8vDIzMzVy5Eiv5/gfNWqUGjVqpEceeUQPPfSQgoOD9cMPP6hXr16KiopSbGysVq9erV27dikiIsI5k8KFhg8frri4OD3//PO66667lJSUpLfeekvvvPNOvj5fQcj1v8ccDoccDodq1KihQ4cOOV87HA6lpaVp27ZtuvnmmwuzVgDARbLCbNmyufvmN1CURUREKC4uTq+99ppuuOEGNWzYUKNHj9bAgQNdZhm4UGRkpL799ltt2LBBTZs21TPPPKMxY8ZIkss42rx48cUX1bNnT9133326+uqrtX37di1ZskTly5d32/7aa6/Vu+++q9dff11NmjTR0qVL9eyzz+arhldffVXVq1fX9ddfr7vvvltPPvmkwr0ct3HFFVdo6dKl+v3339WyZUvFx8fr66+/VqlS5jXNJ598UoGBgWrQoIGio6O1Z8+ebO9x9dVXa/bs2Zo/f74aNmyoMWPGaMKECfke+lEQbMbFAzGKuZSUFJUtW1YnT55UZGRkoR/Pbrdr0aJF6tq1K3dLuwh94x794hl94+rAAalKFclmM/TSS29o2LBH6JeLlORz5ty5c9q5c6dq1aqVLdT5esysr82dO1cDBgzQyZMnvR4vWtz7Jq8Ko19yOke9yWtefwFswoQJOW7P+tcQAKBwff+9+dysmaFSpaz50gpQFHz44Yeq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",
      "text/plain": [
       "<Figure size 800x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 定义 Sigmoid 函数\n",
    "def sigmoid(x):\n",
    "    return 1 / (1 + np.exp(-x))\n",
    "\n",
    "# 生成 x 值\n",
    "x = np.linspace(-10, 10, 400)\n",
    "# 计算 y 值\n",
    "y = sigmoid(x)\n",
    "\n",
    "# 绘制 Sigmoid 函数曲线\n",
    "plt.figure(figsize=(8, 6))\n",
    "plt.plot(x, y, label='Sigmoid Function', color='blue')\n",
    "plt.title('Sigmoid Activation Function')\n",
    "plt.xlabel('Input (x)')\n",
    "plt.ylabel('Output (σ(x))')\n",
    "plt.axhline(0, color='gray', lw=0.5)\n",
    "plt.axhline(1, color='gray', lw=0.5)\n",
    "plt.axvline(0, color='gray', lw=0.5)\n",
    "plt.legend()\n",
    "plt.grid(True)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAe4AAAGzCAYAAADpB/R/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA2LElEQVR4nO3deXgV5f3//9chwkkETiCQDQw7sq9BMKAkKJrSyGX4WKuIJSJitVBFFEv6rbJYiNQiWKXgUokFKSoKeLlAEQh8gIBsoYKKggiBKwFkSVgDJPfvj/5yPh6ycLKcczLM83Fdc13O5J6Ze3KML9/3zJnbYYwxAgAAllAr0B0AAADeI7gBALAQghsAAAshuAEAsBCCGwAACyG4AQCwEIIbAAALIbgBALAQghsAAAshuAEAsBCCG36Rnp4uh8OhrVu3BrorkqRz585p0qRJysjI8Kp9RkaGHA6He3E6nYqMjFRCQoKmTZumY8eOVbovX3/9tSZNmqQff/yx0scIhOLfyeLFiwPdFcBWCG7Y0rlz5zR58mSvg7vYE088ofnz5+uNN97Q+PHjFRYWpokTJ6pDhw5avXp1pfry9ddfa/LkyZYLbgCBcV2gOwBYya233qpf/epXHtt27typO++8U/fcc4++/vprRUdHB6h3AOyAihsB89BDD6levXo6fPiwkpOTVa9ePYWHh+uZZ55RYWGhu92PP/4oh8Ohv/71r5o5c6aaN2+ukJAQxcfHa9euXR7HTEhIUEJCQqnnatGihft44eHhkqTJkye7h78nTZpUqevo1q2bZs2apVOnTum1115zbz9w4IB+97vfqV27dgoJCVGjRo107733elTW6enpuvfeeyVJAwYMcPeleCRg2bJlSkpKUpMmTeR0OtW6dWu98MILHr+fsnhzfkm6dOmSJk+erLZt2yo4OFiNGjXSLbfcopUrV1b4dzFp0iQ5HA599913evDBBxUaGqrw8HA999xzMsYoOztbd999t1wul6KiojRjxgyP/S9evKjnn39esbGxCg0NVd26dXXrrbdqzZo1Jc51/Phx/eY3v5HL5VKDBg2UkpKinTt3yuFwKD093aPtt99+q1/96lcKCwtTcHCwevXqpY8//rjC1wfUBAQ3AqqwsFCJiYlq1KiR/vrXvyo+Pl4zZszQG2+8UaLtP//5T/3tb3/T6NGjlZqaql27dum2227TkSNHKnTO8PBwzZkzR5I0ZMgQzZ8/X/Pnz9f//M//VPo6fvWrXykkJET//ve/3du2bNmijRs36v7779ff/vY3PfbYY1q1apUSEhJ07tw5SVL//v31xBNPSJL++Mc/uvvSoUMHSf8N9nr16mncuHF65ZVXFBsbq+eff14TJky4ap+8Ob/037CdPHmyBgwYoNdee03/7//9PzVr1kzbt2+v9O/jvvvuU1FRkV588UX16dNHf/7znzVr1izdcccdatq0qaZPn642bdromWee0bp169z75efn66233lJCQoKmT5+uSZMm6dixY0pMTFRWVpa7XVFRkQYPHqx//etfSklJ0dSpU5WTk6OUlJQSfdm9e7duvvlmffPNN5owYYJmzJihunXrKjk5WUuWLKn0NQIBYwA/mDdvnpFktmzZ4t6WkpJiJJkpU6Z4tO3Ro4eJjY11r+/fv99IMiEhIebQoUPu7Zs3bzaSzFNPPeXeFh8fb+Lj40ucPyUlxTRv3ty9fuzYMSPJTJw40av+r1mzxkgyH3zwQZltunXrZho2bOheP3fuXIk2mZmZRpL55z//6d72wQcfGElmzZo1JdqXdozf/va35vrrrzcXLlwot8/enr9bt24mKSmp3GOVprTfycSJE40k8+ijj7q3Xb582dxwww3G4XCYF1980b395MmTJiQkxKSkpHi0LSgo8DjPyZMnTWRkpHn44Yfd2z788EMjycyaNcu9rbCw0Nx2221Gkpk3b557++233266dOni8fsqKioyffv2NW3btq3wdQOBRsWNgHvsscc81m+99Vb98MMPJdolJyeradOm7vXevXurT58++uyzz3zeR2/Uq1dPp0+fdq+HhIS4//nSpUs6fvy42rRpowYNGnhdzf78GKdPn9ZPP/2kW2+9VefOndO3337r9b7lnb9BgwbavXu3vv/+e6/65I1HHnnE/c9BQUHq1auXjDEaOXKkx3nbtWvn8VkHBQWpTp06kv5bVZ84cUKXL19Wr169PPq8fPly1a5dW6NGjXJvq1WrlkaPHu3RjxMnTmj16tX69a9/7f79/fTTTzp+/LgSExP1/fff6/Dhw9V23YA/ENwIqODgYPf95mINGzbUyZMnS7Rt27ZtiW033nhjjXka+8yZM6pfv757/fz583r++ecVExMjp9Opxo0bKzw8XKdOnVJeXp5Xx9y9e7eGDBmi0NBQuVwuhYeH68EHH5Skqx7D2/NPmTJFp06d0o033qguXbpo/Pjx+s9//lOJ38D/adasmcd6aGiogoOD1bhx4xLbr/ys33nnHXXt2tV9vz08PFyffvqpR58PHDig6OhoXX/99R77tmnTxmN97969MsboueeeU3h4uMcyceJESdLRo0erdK2Av/FUOQIqKCioWo/ncDhkjCmx3ZuHuari0qVL+u6779S5c2f3tt///veaN2+exo4dq7i4OIWGhsrhcOj+++9XUVHRVY956tQpxcfHy+VyacqUKWrdurWCg4O1fft2/eEPf7jqMbw9f//+/bVv3z4tW7ZM//73v/XWW29p5syZmjt3rkflXBGlfa5lfdY//7wWLFighx56SMnJyRo/frwiIiIUFBSktLQ07du3r8L9KL7OZ555RomJiaW2uTLsgZqO4IZllDaU+91337mfFpf+W62XNsx+4MABj3WHw1GtfVu8eLHOnz/vEQ6LFy9WSkqKx5PTFy5c0KlTp7zqS0ZGho4fP66PPvpI/fv3d2/fv3+/133y5vySFBYWphEjRmjEiBE6c+aM+vfvr0mTJlU6uCtr8eLFatWqlT766COP30txdVysefPmWrNmjc6dO+dRde/du9ejXatWrSRJtWvX1sCBA33Yc8B/GCqHZSxdutTjfuSXX36pzZs3a9CgQe5trVu31rfffuvxJrOdO3dqw4YNHscq/o99aSFWUTt37tTYsWPVsGFDj3usQUFBJar/V199tUT1X7du3VL7Ulyh/vwYFy9e1N///nev+uXt+Y8fP+6xXq9ePbVp00YFBQVenac6lXbNmzdvVmZmpke7xMREXbp0SW+++aZ7W1FRkWbPnu3RLiIiQgkJCXr99deVk5NT4nxVeeMdEChU3LCMNm3a6JZbbtHjjz+ugoICzZo1S40aNdKzzz7rbvPwww/r5ZdfVmJiokaOHKmjR49q7ty56tSpk/Lz893tQkJC1LFjR7333nu68cYbFRYWps6dO3sMdZfmf//3f3XhwgUVFhbq+PHj2rBhgz7++GOFhoZqyZIlioqKcre96667NH/+fIWGhqpjx47KzMzUF198oUaNGnkcs3v37goKCtL06dOVl5cnp9Op2267TX379lXDhg2VkpKiJ554Qg6HQ/Pnzy/1VkBpvD1/x44dlZCQoNjYWIWF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0Yc98x1vrnnNmjVGkjl58qRf+uQPR48eNZLM2rVry2xzLfxdX8mb674W/7arwvIVd2Zmpho0aKBevXq5tw0cOFC1atXS5s2by9333XffVePGjdW5c2elpqbW2Dm8L168qG3btmngwIHubbVq1dLAgQOVmZlZ6j6ZmZke7SUpMTGxzPY1TWWuWfq/udxjYmJ09913a/fu3f7obkBZ/bOuiu7duys6Olp33HGHNmzYEOjuVEleXp4kKSwsrMw21+Jn7c11S/b82y6L5YM7Nze3xPDYddddp7CwsHLvdz3wwANasGCB1qxZo9TUVM2fP18PPvigr7tbKT/99JMKCwsVGRnpsT0yMrLMa8zNza1Q+5qmMtfcrl07vf3221q2bJkWLFigoqIi9e3bV4cOHfJHlwOmrM86Pz9f58+fD1CvfCs6Olpz587Vhx9+qA8//FAxMTFKSEjQ9u3bA921SikqKtLYsWPVr18/de7cucx2Vv+7vpK3123Xv+2y+GVaz8qYMGGCpk+fXm6bb775ptLH//k98C5duig6Olq333679u3bp9atW1f6uAicuLg4xcXFudf79u2rDh066PXXXy91LndYV7t27dSuXTv3et++fbVv3z7NnDlT8+fPD2DPKmf06NHatWuX1q9fH+iu+JW3183ftqcaG9xPP/20eyKSsrRq1UpRUVElHla6fPmyTpw4oaioKK/P16dPH0nS3r17a1xwN27cWEFBQTpy5IjH9iNHjpR5jVFRURVqX9NU5pqvdLW53K8VZX3WLpfLPQufHfTu3duSwTdmzBj3Q7U33HBDuW2t/nf9cxW57ivZ5W+7LDV2qDw8PFzt27cvd6lTp47i4uJ06tQpbdu2zb3v6tWrVVRU5A5jb2RlZUlSjZz3u06dOoqNjdWqVavc24qKirRq1SqP/wv9ubi4OI/2krRy5coy29c0lbnmK9llLnerf9bVJSsry1KftTFGY8aM0ZIlS7R69Wq1bNnyqvtcC591Za77Snb52y5ToJ+Oqw6/+MUvTI8ePczmzZvN+vXrTdu2bc3QoUPdPz906JBp166d2bx5szHGmL1795opU6aYrVu3mv3795tly5aZVq1amf79+wfqEq5q0aJFxul0mvT0dPP111+bRx991DRo0MDk5uYaY4z5zW9+YyZMmOBuv2HDBnPdddeZv/71r+abb74xEydONLVr1zZfffVVoC6hwip6zZMnTzYrVqww+/btM9u2bTP333+/CQ4ONrt37w7UJVTK6dOnzY4dO8yOHTuMJPPyyy+bHTt2mAMHDhhjjJkwYYL5zW9+427/ww8/mOuvv96MHz/efPPNN2b27NkmKCjILF++PFCXUGEVveaZM2eapUuXmu+//9589dVX5sknnzS1atUyX3zxRaAuocIef/xxExoaajIyMkxOTo57OXfunLvNtfh3XZnrvlb+tqvLNRHcx48fN0OHDjX16tUzLpfLjBgxwpw+fdr98/379xtJZs2aNcYYYw4ePGj69+9vwsLCjNPpNG3atDHjx483eXl5AboC77z66qumWbNmpk6dOqZ3795m06ZN7p/Fx8eblJQUj/bvv/++ufHGG02dOnVMp06dzKeffurnHlddRa557Nix7raRkZHml7/8pdm+fXsAel01xV91unIpvtaUlBQTHx9fYp/u3bubOnXqmFatWpl58+b5vd9VUdFrnj59umndurUJDg42YWFhJiEhwaxevTowna+k0q5Xksdndy3+XVfmuq+Vv+3qwnzcAABYSI29xw0AAEoiuAEAsBCCGwAACyG4AQCwEIIbAAALIbgBALAQghsAAAshuAEAsBCCGwAACyG4AQCwEIIbAAAL+f8AQ1pMgb5MRo4AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Reconstructed array from image:\n",
      "[[255 255 255 ... 255 255 255]\n",
      " [255 255 255 ... 255 255 255]\n",
      " [255 255 255 ... 255 255 255]\n",
      " ...\n",
      " [255 255 255 ... 255 255 255]\n",
      " [255 255 255 ... 255 255 255]\n",
      " [255 255 255 ... 255 255 255]]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from PIL import Image\n",
    "\n",
    "# 定义3x3的输入数据\n",
    "input_data = np.array([\n",
    "    [1, 2, 3],\n",
    "    [4, 5, 6],\n",
    "    [7, 8, 9]\n",
    "])\n",
    "\n",
    "# 将数据转换为图像并保存\n",
    "plt.imshow(input_data, cmap='gray')\n",
    "plt.title('Input Data as Image')\n",
    "plt.colorbar()\n",
    "plt.savefig('input_image.png', dpi=300)  # 保存图像时使用更高的DPI\n",
    "plt.show()\n",
    "\n",
    "# 重新加载图像并转换为数组\n",
    "image_path = 'input_image.png'\n",
    "image = Image.open(image_path).convert('L')  # 将图像转换为灰度\n",
    "image_array = np.array(image, dtype=np.uint8)\n",
    "\n",
    "# 显示重新加载的数组\n",
    "print(\"\\nReconstructed array from image:\")\n",
    "print(image_array)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'torch'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[5], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mtorch\u001b[39;00m\n\u001b[0;32m      2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mtorch\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mnn\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnn\u001b[39;00m\n\u001b[0;32m      4\u001b[0m \u001b[38;5;66;03m# 假设词汇表大小为10000，每个单词映射为长度为512的向量\u001b[39;00m\n",
      "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'torch'"
     ]
    },
    {
     "ename": "",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n",
      "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n",
      "\u001b[1;31mClick <a href='https://aka.ms/vscodeJupyterKernelCrash'>here</a> for more info. \n",
      "\u001b[1;31mView Jupyter <a href='command:jupyter.viewOutput'>log</a> for further details."
     ]
    }
   ],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "\n",
    "# 假设词汇表大小为10000，每个单词映射为长度为512的向量\n",
    "vocab_size = 10000\n",
    "embedding_dim = 512\n",
    "\n",
    "# 定义嵌入层\n",
    "embedding_layer = nn.Embedding(vocab_size, embedding_dim)\n",
    "\n",
    "# 示例输入\n",
    "input_tokens = torch.LongTensor([[1, 2, 3, 4, 5]])\n",
    "\n",
    "# 将输入token映射为向量表示\n",
    "embedded_tokens = embedding_layer(input_tokens)\n",
    "\n",
    "print(\"Embedded tokens shape:\", embedded_tokens.shape)  # 输出：torch.Size([1, 5, 512])\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "deep-daze-main",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
